diff --git a/PoweredSoft.DynamicLinq/Helpers/QueryableHelpers.cs b/PoweredSoft.DynamicLinq/Helpers/QueryableHelpers.cs index e439333..57fac38 100644 --- a/PoweredSoft.DynamicLinq/Helpers/QueryableHelpers.cs +++ b/PoweredSoft.DynamicLinq/Helpers/QueryableHelpers.cs @@ -77,7 +77,7 @@ namespace PoweredSoft.DynamicLinq.Helpers return ret; } - internal static IQueryable GroupBy(IQueryable query, Type type, List<(string path, string propertyName)> parts) + public static IQueryable GroupBy(IQueryable query, Type type, List<(string path, string propertyName)> parts) { // EXPRESSION var parameter = Expression.Parameter(type, "t"); @@ -95,6 +95,10 @@ namespace PoweredSoft.DynamicLinq.Helpers var anonymousType = TypeHelpers.CreateSimpleAnonymousType(fields); + var constructorTypes = fields.Select(t => t.type).ToArray(); + var constructor = anonymousType.GetConstructor(constructorTypes); + var newExpression = Expression.New(constructor, partExpressions); + var genericMethod = Constants.GroupByMethod.MakeGenericMethod(type, anonymousType); return query; } diff --git a/PoweredSoft.DynamicLinq/Helpers/TypeHelpers.cs b/PoweredSoft.DynamicLinq/Helpers/TypeHelpers.cs index f2a5a18..2a7bb2a 100644 --- a/PoweredSoft.DynamicLinq/Helpers/TypeHelpers.cs +++ b/PoweredSoft.DynamicLinq/Helpers/TypeHelpers.cs @@ -35,6 +35,12 @@ namespace PoweredSoft.DynamicLinq.Helpers return ret; } + /// + /// Use this to create anonymous type concstructor for LINQ queries :) + /// https://stackoverflow.com/questions/6879279/using-typebuilder-to-create-a-pass-through-constructor-for-the-base-class + /// + /// + /// internal static TypeInfo CreateSimpleAnonymousType(List<(Type type, string name)> fields) { // DYNAMIC TYPE CREATION