【问题标题】:How parse a string as linq exprssion?如何将字符串解析为 linq 表达式?
【发布时间】:2010-06-22 16:06:33
【问题描述】:

我有这个 linq to devforce 表达式:

(from r in mgr.testTables select r).OrderBy(r => r.id);

我想将排序列名称指定为字符串,我需要这样的东西:

string orderBy = "r => r.id";
(从 mgr.testTables 中的 r 选择 r).OrderBy( orderBy );

有没有办法将字符串解析为 linq 表达式?

【问题讨论】:

标签: string linq parsing expression devforce


【解决方案1】:

在 MSDN 代码库的 DynamicQuery 下,有一个完全可操作的表达式解析器示例,它实际上会根据 C# Samples for Visual Studio 2008 中的字符串为您执行此操作。 (LinqDataSource 控件在内部使用了此示例的略微修改版本。)

【讨论】:

    【解决方案2】:

    一种选择是为此使用Dynamic LINQ 项目。我认为这与鲁本提到的DynamicQuery 是一回事。无论如何,它允许您编写如下内容:

    var res = db.Table.Where("CategoryID == 2").Select("CategoryName");
    

    动态 LINQ 添加了将字符串作为参数的常用 LINQ 方法的重载。它们将字符串解析为表达式树,然后 LINQ 或 LINQ to SQL 可以使用该树。

    另一种方法是从简单的代码片段(例如访问各种属性的函数和可用于将它们与值进行比较的各种运算符)组成表达式树。我认为这更优雅并且涉及更少的开销。我写了关于this approach here 的文章,有一个名为PredicateBuilder 的类型使它更简单。

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多