Динамическая группа LINQПо вопросу

Я использую Dyanmic LINQ из примеров кода VS2010, поскольку пытаюсь создать групповое выражение LINQ. Я хочу предоставить пользователю возможность выбирать во время выполнения свойства для группировки, а также период группировки (год, квартал, месяц). Из-за этого я решил перейти на Dynamic LINQ.

Вот пример моих данных:

ID| Доход | Ордата |
1 | 900000 | 1-1-2000 |
2 | 180000 | 1-9-2000 |
3 | 300000 | 3-2-2002 |
4 | 100000 | 2-7-2003 |

и выражение, которое я строю, выглядит так:

dataSource.GroupBy("new (OrDate.Year as Year, OrDate as Month)", "Income").Select("new (Key.Year, Key.Month, Sum(Value) as Income)");

Это хорошо работает, ТОЛЬКО я знаю точный тип списка; например: List<Product> или List<Order>. Моя проблема в том, что тип dataSource во время компиляции — это List<object>. Из-за этого всякий раз, когда я заполняю список Заказами или Продуктами, я получаю исключение:

No generic method 'GroupBy' on type 'System.Linq.Queryable' is compatible with the supplied type arguments and arguments. No type arguments should be provided if the method is non-generic.

Может ли кто-нибудь сказать мне, как этого можно избежать и при этом сохранить список источников как List<object>?


person Stefan Szasz    schedule 20.03.2011    source источник
comment
Это даже компилируется, если dataSource является List<T>? Метод GroupBy в Dynamic LINQ является методом расширения IQueryable, а не IEnumerable.   -  person Slauma    schedule 21.03.2011
comment
Плохо, ты прав, это IQueryable.   -  person Stefan Szasz    schedule 21.03.2011
comment
Это неуниверсальный IQueryable или IQueryable<object>? Я пытался воспроизвести ошибку, но получаю только такие ошибки, как OrDate не является членом типа Object, но не ваше сообщение об ошибке. Не могли бы вы уточнить, что такое dataSource и откуда оно взялось?   -  person Slauma    schedule 22.03.2011


Ответы (1)


Попробуй это -

For group by in LinQ

var x = t.GroupBy(gp => gp.Name).OrderBy(group => group.Key).Select(group => Tuple.Create(group.Key, group.Count()));

Пожалуйста найди

https://dotnetfiddle.net/WPqzhJ

person Amit Prabhu    schedule 01.09.2015