Для всех интересных методов LINQ требуется общее лямбда-выражение - то есть Expression<SomeFuncType>
, например Expression<Func<T,bool>>
для предикатов (where
) или Expression<Func<TSource,TValue>>
для проекций (select
).
То, что вы делаете звучит как Select
, но вам придется придать ему более конкретную лямбду, чтобы это было полезно, и это не сработает легко - вам, вероятно, понадобится немного MakeGenericMethod
и т. д.
Повторное применение Expression
к LINQ-to-Objects, это легкий бит. Вы можете просто использовать:
var projection = theList.AsQueryable().Select(lambda);
или
var filtered = theList.AsQueryable().Where(lambda);
(но обратите внимание, что lambda
должен быть набран соответствующим образом; Expression
не будет обрезать его).
(В качестве альтернативы вы можете вызвать .Compile()
для лямбды и использовать обычные LINQ-to-Objects)