#c# #linq
#c# #linq
Вопрос:
Я пытаюсь динамически использовать отражение для выполнения GroupBy после SelectMany:
var origType = typeof(CustomerCases);
var parameter = Expression.Parameter(origType, "x");
var propExpr = Expression.Property(par, "Customer");
var firstGenType = typeof(Customer);
var resultType = typeof(IGrouping<,>).MakeGenericType(new [] {firstGenType, origType});
var lambda = Expression.Lambda(Expression.Convert(propExpr, resultType), parameter);
var groupbyExpression = Expression.Call(
typeof(Queryable),
nameof(Queryable.GroupBy),
new [] { origType, firstGenType },
querySelectMany.Expression,
lambda);
Однако при попытке установить выражение groupbyвыражение выдает исключение:
Исключение типа ‘System.Исключение InvalidOperationException’ произошло в System.Linq.выражениями.dll, но не был обработан в пользовательском коде: ‘Нет универсального метода ‘GroupBy’ для типа ‘System.Linq.Queryable» совместим с предоставленными аргументами и аргументами типа. Никакие аргументы типа не должны предоставляться, если метод не является универсальным. ‘
Есть идеи?
Комментарии:
1. Что такое type of
querySelectMany.Expression
? и вашlambda
вид немного странный для меня.2. У меня есть идеи, но что вы хотите сделать с этой группировкой позже? Выберите количество, агрегирование?
3. Каким может быть результат вашего лямбда-
IGrouping
выражения? Это результат вызоваGroupBy
.4. В вашем коде есть другие ошибки (например
par
, versusparameter
). Пожалуйста, исправьте их.5. почему вы пытаетесь создать универсальную группу с помощью? используйте обычный groupby — он более удобен в обслуживании. универсальная группа by будет опасной, поскольку они требуют вычисления дерева выражений.