Пример #1
0
        internal static IQueryable Build(IQueryable query, IEnumerable <Tuple <Sort, LambdaExpression> > sorts)
        {
            bool then = false;

            foreach (var state in sorts)
            {
                var    lambda = state.Item2;
                string name   = "Queryable";

                if (!then)
                {
                    name += "OrderBy";
                    then  = true;
                }
                else
                {
                    name += "ThenBy";
                }

                if (state.Item1.SortType == SortType.Descending)
                {
                    name += "Descending";
                }

                query = (IQueryable)TypicalLinqMethods.GetMethod(name)
                        .MakeGenericMethod(query.ElementType, lambda.ReturnType)
                        .Invoke(null, new object[] { query, lambda });
            }

            return(query);
        }
Пример #2
0
        protected internal override Expression CreateExpression(MemberExpression member, WhereBuilderContext context)
        {
            if (Value == null)
            {
                return(null);
            }

            var value = Expression.Constant(Value, member.Type);

            if (Operator != StringOperator.Equal)
            {
                return(Expression.Call(member, TypicalLinqMethods.GetMethod("String" + Operator), value));
            }
            else
            {
                return(Expression.Equal(member, value, true, null));
            }
        }