simple grouping.
This commit is contained in:
@@ -6,6 +6,7 @@ using System.Linq.Expressions;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Reflection.Emit;
|
||||
|
||||
namespace PoweredSoft.DynamicLinq.Helpers
|
||||
{
|
||||
@@ -76,6 +77,42 @@ namespace PoweredSoft.DynamicLinq.Helpers
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static IQueryable GroupBy(IQueryable query, Type type, string path)
|
||||
{
|
||||
var parameter = Expression.Parameter(type, "t");
|
||||
var field = QueryableHelpers.ResolvePathForExpression(parameter, path);
|
||||
var lambda = Expression.Lambda(field, parameter);
|
||||
var genericMethod = Constants.GroupByMethod.MakeGenericMethod(type, field.Type);
|
||||
var groupByEpression = Expression.Call(genericMethod, query.Expression, lambda);
|
||||
var result = query.Provider.CreateQuery(groupByEpression);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static IQueryable GroupByAnonymousObject(IQueryable query, Type type, ParameterExpression parameter, List<Expression> fields)
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
/*
|
||||
var dynamicAssemblyName = new AssemblyName("PoweredSoft.DynamicLinq.DynamicTypes");
|
||||
var dynamicAssembly = AssemblyBuilder.DefineDynamicAssembly(dynamicAssemblyName, System.Reflection.Emit.AssemblyBuilderAccess.Run);
|
||||
System.Reflection.Emit.ModuleBuilder dynamicModule = dynamicAssembly.DefineDynamicModule("TempAssembly");
|
||||
|
||||
TypeBuilder dynamicAnonymousType = dynamicModule.DefineType("AnonymousType", TypeAttributes.Public);
|
||||
|
||||
int i = 0;
|
||||
fields.ForEach(field =>
|
||||
{
|
||||
var fieldName = $"A_{++i}"; // tODO
|
||||
dynamicAnonymousType.DefineField(fieldName.
|
||||
});
|
||||
|
||||
dynamicAnonymousType.DefineField(, typeof(TFieldA), FieldAttributes.Public);
|
||||
dynamicAnonymousType.DefineField(fieldNameB, typeof(TFieldB), FieldAttributes.Public);
|
||||
|
||||
return dynamicAnonymousType.CreateType();
|
||||
|
||||
throw new NotImplementedException(); */
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the right expression for a path supplied.
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user