c# - 将表达式树直接应用于列表的代码

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

}

非常感谢在这方面的任何帮助。

最佳答案

所有有趣的 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/

相关文章:

c# - 从 C# 解决方案调试 C++ 解决方案

.net - 错误记录和异常通知库

c# - 如何在 C# 中转义字符串,以便在 LDAP 查询中使用

c# - 如何通过 Linq 消除笛卡尔积的对称性?

c# - LINQ to Entities 根据结果拆分字符串

c# - 将 SignalR 中心移动到另一个项目

c# - 设计建议。使用 DataTable 或 List<MyObject> 作为通用规则检查器

c# 5 异步作为糖语法(或不是)?

c# - 当我在 C# 中使用今天的日期时,为什么时间会变成 0000

c# - 使用 LINQ 获取内部列表的值