将表达式树直接应用于List的代码

时间:2010-04-07 02:24:03

标签: c# .net linq expression-trees

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);
    }

}

对此方面的任何帮助表示高度赞赏。

1 个答案:

答案 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到对象)