我有这个 linq to devforce 表达式:
(从 mgr.testTables 中的 r 选择 r).OrderBy(r => r.id);
我想将排序列名称指定为字符串,我需要这样的东西:
字符串 orderBy = "r => r.id";
(从 mgr.testTables 中的 r 选择 r).OrderBy( orderBy );
有没有办法将字符串解析为 linq 表达式?
我有这个 linq to devforce 表达式:
(从 mgr.testTables 中的 r 选择 r).OrderBy(r => r.id);
我想将排序列名称指定为字符串,我需要这样的东西:
字符串 orderBy = "r => r.id";
(从 mgr.testTables 中的 r 选择 r).OrderBy( orderBy );
有没有办法将字符串解析为 linq 表达式?
一种选择是为此使用动态 LINQ项目。DynamicQuery
我认为这与鲁本提到的相同。无论如何,它允许您编写如下内容:
var res = db.Table.Where("CategoryID == 2").Select("CategoryName");
动态 LINQ 添加了将字符串作为参数的常用 LINQ 方法的重载。它们将字符串解析为表达式树,然后 LINQ 或 LINQ to SQL 可以使用该表达式树。
另一种方法是从简单的代码片段(例如访问各种属性的函数和可用于将它们与值进行比较的各种运算符)组成表达式树。我认为这更优雅并且涉及更少的开销。我在这里写过这种方法,有一个名为PredicateBuilder的类型使它更简单。
在 MSDN 代码库的DynamicQuery下,有一个完全可操作的表达式解析器示例,它将根据Visual Studio 2008 的 C# 示例中的字符串实际为您执行此操作。(该控件在内部使用了此示例的略微修改版本。)LinqDataSource