Beispiel #1
0
        public static IQuery <T> ApplySelectsAndExpands <T>(IQuery <T> query, LambdaExpression lambda)
            where T : class
        {
            var queryModifiers = ExpressionUtils.ExpandLambdaExpression(lambda).SelectMany(z => ExpressionUtils.ParseToQuery(lambda.Parameters[0], z)).ToList();

            IQuery <T> modifiedQuery = query;

            IEnumerable <string> selects = queryModifiers.Where(mod => mod.ModType == QueryModifierType.Select).Select(mod => mod.Property).Distinct().OrderBy(s => s.Length);

            foreach (string select in selects)
            {
                modifiedQuery = modifiedQuery.Select(select);
            }

            IEnumerable <string> expands = queryModifiers.Where(mod => mod.ModType == QueryModifierType.Expand).Select(mod => mod.Property).Distinct().OrderBy(s => s.Length);

            foreach (string expand in expands)
            {
                modifiedQuery = modifiedQuery.Expand(expand);
            }

            return(modifiedQuery);
        }