From a7937cd500f684d51e10c160a0c796313a807cd0 Mon Sep 17 00:00:00 2001 From: David Lebee Date: Fri, 26 Oct 2018 16:13:42 -0500 Subject: [PATCH] flattening support on wrap select. --- PoweredSoft.DynamicLinq.Test/GroupingTests.cs | 5 +++-- PoweredSoft.DynamicLinq/Helpers/QueryableHelpers.cs | 10 ++++++++-- .../Helpers/QueryablePathHelpers.cs | 12 ------------ 3 files changed, 11 insertions(+), 16 deletions(-) delete mode 100644 PoweredSoft.DynamicLinq/Helpers/QueryablePathHelpers.cs diff --git a/PoweredSoft.DynamicLinq.Test/GroupingTests.cs b/PoweredSoft.DynamicLinq.Test/GroupingTests.cs index 7ea08ea..5749bd8 100644 --- a/PoweredSoft.DynamicLinq.Test/GroupingTests.cs +++ b/PoweredSoft.DynamicLinq.Test/GroupingTests.cs @@ -9,6 +9,7 @@ using PoweredSoft.DynamicLinq.Dal; using System.Diagnostics; using PoweredSoft.DynamicLinq.Test.Helpers; using System.Collections; +using PoweredSoft.DynamicLinq.Dal.Pocos; namespace PoweredSoft.DynamicLinq.Test { @@ -289,7 +290,7 @@ namespace PoweredSoft.DynamicLinq.Test } [TestMethod] - public void GroupByToListWithPathWithNullChecking() + public void GroupByToListWithPathWithNullCheckingWithFlattening() { var limitResult = TestData.Authors; @@ -300,7 +301,7 @@ namespace PoweredSoft.DynamicLinq.Test .Select(t => new { Key = t.Key.AuthorFirstName, - Contents = t.SelectMany(t2 => t2.Posts.Select(t3 => t3.Content)).ToList() + Contents = t.SelectMany(t2 => t2.Posts == null ? new List() : t2.Posts.Select(t3 => t3.Content)).ToList() }) .ToList(); diff --git a/PoweredSoft.DynamicLinq/Helpers/QueryableHelpers.cs b/PoweredSoft.DynamicLinq/Helpers/QueryableHelpers.cs index d16cef1..d9985a6 100644 --- a/PoweredSoft.DynamicLinq/Helpers/QueryableHelpers.cs +++ b/PoweredSoft.DynamicLinq/Helpers/QueryableHelpers.cs @@ -220,10 +220,16 @@ namespace PoweredSoft.DynamicLinq.Helpers { var selectType = parameter.Type.GenericTypeArguments.Skip(1).First(); var innerSelectType = ((LambdaExpression)innerLambdaExpression).ReturnType; - var selectExpression = Expression.Call(typeof(Enumerable), "Select", new Type[] { selectType, innerSelectType }, parameter, innerLambdaExpression); + + Expression selectExpression; + if (QueryableHelpers.IsGenericEnumerable(innerSelectType) && selectCollectionHandling == SelectCollectionHandling.Flatten) + selectExpression = Expression.Call(typeof(Enumerable), "SelectMany", new Type[] { selectType, innerSelectType.GenericTypeArguments.First() }, parameter, innerLambdaExpression); + else + selectExpression = Expression.Call(typeof(Enumerable), "Select", new Type[] { selectType, innerSelectType }, parameter, innerLambdaExpression); + return selectExpression; } - + private static Expression CreateSelectExpression(IQueryable query, ParameterExpression parameter, SelectTypes selectType, string path, SelectCollectionHandling selectCollectionHandling, bool nullChecking) { if (!IsGrouping(query)) diff --git a/PoweredSoft.DynamicLinq/Helpers/QueryablePathHelpers.cs b/PoweredSoft.DynamicLinq/Helpers/QueryablePathHelpers.cs deleted file mode 100644 index d5b6a9a..0000000 --- a/PoweredSoft.DynamicLinq/Helpers/QueryablePathHelpers.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Collections.Generic; -using System.Linq.Expressions; -using System.Text; - -namespace PoweredSoft.DynamicLinq.Helpers -{ - - public static class QueryablePathHelpers - { - - } -}