‘Нет универсального метода ‘GroupBy’ для типа ‘System.Linq.Queryable’ совместим с предоставленными аргументами типа и аргументами

#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 , versus parameter ). Пожалуйста, исправьте их.

5. почему вы пытаетесь создать универсальную группу с помощью? используйте обычный groupby — он более удобен в обслуживании. универсальная группа by будет опасной, поскольку они требуют вычисления дерева выражений.