Я пытаюсь использовать Dynamic Linq (опубликованный ScottGu) для создания GroupBy (лямбда-выражения).У меня есть объект.И я делаю AsQueryable.Это то, что у меня есть ..
var result = Items.AsQueryable().GroupBy("DeliveryDate");
, но это дает мне ошибку, говоря, что аргументы не могут быть выведены из использования.Я думаю, что не смотрит на правильный OrderBy.
Предметы это List<Stock>
.
Я пытался добавить <> к GroupBy
, но я думаю, что мне нужно пропустить более 1 пункта.Я немного сбит с толку.
Поле, которое я передаю (через строку), может быть любого типа, в данном примере это DateTime.
Если я делаю свой стандартный LINQ, то этоработает.то есть:
var result = Items.AsQueryable().GroupBy( x => x.DeliveryDate);
Вот метод расширения (от ScottGu):
public static IQueryable GroupBy(this IQueryable source, string keySelector, string elementSelector, params object[] values) {
if (source == null) throw new ArgumentNullException("source");
if (keySelector == null) throw new ArgumentNullException("keySelector");
if (elementSelector == null) throw new ArgumentNullException("elementSelector");
LambdaExpression keyLambda = DynamicExpression.ParseLambda(source.ElementType, null, keySelector, values);
LambdaExpression elementLambda = DynamicExpression.ParseLambda(source.ElementType, null, elementSelector, values);
return source.Provider.CreateQuery(
Expression.Call(
typeof(Queryable), "GroupBy",
new Type[] { source.ElementType, keyLambda.Body.Type, elementLambda.Body.Type },
source.Expression, Expression.Quote(keyLambda), Expression.Quote(elementLambda)));
}
У меня есть использование в проекте using System.Linq.Dynamic;
- и я использую динамический OrderBy
вдругой метод, поэтому я знаю, что он должен его видеть.
Я немного растерялся, кажется, что при использовании динамического LINQ он не понимает, какой объект я использую.