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);
}
}
非常感谢在这方面的任何帮助。
最佳答案
所有有趣的 LINQ 方法都需要一个通用的 lambda 表达式 - 即 Expression<SomeFuncType>
,例如 Expression<Func<T,bool>>
对于谓词 ( where
),或 Expression<Func<TSource,TValue>>
用于预测(select
)。
你在做什么听起来像Select
, 但你必须给它一个更具体的 lambda 才能有用,但这并不容易 - 你可能需要一点 MakeGenericMethod
等
重新申请 Expression
LINQ-to-Objects,这很容易。你可以只使用:
var projection = theList.AsQueryable().Select(lambda);
或
var filtered = theList.AsQueryable().Where(lambda);
(但请再次注意 lambda
必须正确输入;Expression
不会削减它)。
(或者,您可以在 lambda 上调用 .Compile()
并使用常规的 LINQ-to-Objects)
关于c# - 将表达式树直接应用于列表的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2589618/