Ejemplo n.º 1
0
        private static IEnumerable <MemberExpression> MapProperty(ModelPropertyInfo argumentProperty, WhereBuilderContext context)
        {
            var info = context.ElementModel;

            List <string>            names = new List <string>(5);
            List <ModelPropertyInfo> chain = new List <ModelPropertyInfo>(5);

            names.AddRange(argumentProperty.Maps.Where(o => o.SourceType == info.ModelType).Select(o => o.PropertyName));
            if (names.Count == 0)
            {
                names.Add(argumentProperty.Name);
            }

            foreach (string name in names.Distinct())
            {
                chain.Clear();

                ModelConvert.FillPropertyChain(info, name, chain);

                Debug.Assert(chain.Count > 0);

                MemberExpression member = null;

                foreach (var mp in chain)
                {
                    member = Expression.MakeMemberAccess((Expression)member ?? context.Parameter, mp.PropertyInfo);
                }

                yield return(member);
            }
        }
Ejemplo n.º 2
0
        private static Tuple <Sort, LambdaExpression> ParseSort(Sort sort, ModelInfo model)
        {
            List <ModelPropertyInfo> chain = new List <ModelPropertyInfo>(3);

            ModelConvert.FillPropertyChain(model, sort.PropertyName, chain);
            ParameterExpression parameter = Expression.Parameter(model.ModelType, "obj");
            MemberExpression    member    = null;

            foreach (var mp in chain)
            {
                member = Expression.MakeMemberAccess((Expression)member ?? parameter, mp.PropertyInfo);
            }

            return(Tuple.Create(sort, Expression.Lambda(typeof(Func <,>).MakeGenericType(model.ModelType, member.Type), member, parameter)));
        }