Linq中是否有方法调用直接在List<V>
上应用表达式树?例如,如果我有一个基于Order
类型构建的表达式树,并且我有一个List<Order>
项集合,我需要在其上应用此表达式。
我正在寻找类似的东西:
class OrderListStore : IQueryable<V>,
<other interfaces required to implement custom linq provider>
{
List<Order> orders;
public Expression Expression
{
get { return Expression.Constant(this); }
}
IEnumerator<V> IEnumerable<V>.GetEnumerator()
{
//Here I need to have a method that will take the existing expression
//and directly apply on list
something like this .. Expression.Translate(orders);
}
}
对此方面的任何帮助表示高度赞赏。
答案 0 :(得分:2)
所有有趣的LINQ方法都需要一个通用的lambda表达式 - 即Expression<SomeFuncType>
,例如Expression<Func<T,bool>>
用于谓词(where
),或Expression<Func<TSource,TValue>>
用于投影({ {1}})。
你在做什么听起来像select
,但你必须给它一个更具体的lambda才有用,而且这不起作用 - 你' d可能需要一点Select
等。
重新将MakeGenericMethod
应用于LINQ-to-Objects,这很容易。你可以使用:
Expression
或
var projection = theList.AsQueryable().Select(lambda);
(但请再次注意var filtered = theList.AsQueryable().Where(lambda);
必须进行适当的输入; lambda
不会删除它。
(或者,您可以在lambda上调用Expression
并使用常规LINQ到对象)