14

动态编写 LINQ 查询和 Lambda 表达式的最佳方式是什么?

我正在考虑最终用户可以设计业务逻辑规则的应用程序,然后必须执行这些规则。

如果这是一个新手问题,我很抱歉,但是从经验中获得最佳实践会很棒。

4

6 回答 6

11

我不能推荐比你阅读 Bart De Smet ( http://community.bartdesmet.net/blogs/bart/ ) 的帖子更高的建议,他在 Lambda 方面非常出色。

他最近的系列涵盖了动态 Lambda,从http://community.bartdesmet.net/blogs/bart/archive/2008/08/26/to-bind-or-not-to-bind-dynamic-expression-trees-part -0.aspx

绝对漂亮的代码。

于 2008-09-22T10:22:56.470 回答
2

另一种可能性是将脚本运行时集成到您的程序中,以便您的用户可以在 DSL 中编写业务逻辑。IronPython将是候选人。

于 2008-09-22T10:05:22.237 回答
1

我可以看到两种动态生成 lambda 的方法。您可以尝试 Reflection.Emit 直接生成 IL(.Net 字节码)并将它们作为 lambda 调用,或者您可以使用 System.CodeDom 和 Microsoft.CSharp.CSharpCodeProvider 从更高级别的构造生成代码。您想要做什么取决于您希望用户如何输入这些内容。如果您希望用户编写 C#,那么您可以使用内置的编译器。

动态生成 Linq 应该更容易。您应该能够在运行时将 LINQ 查询生成为表达式树,然后将它们传递给 IQueryable 以执行。我建议您查看有关 IQueryable 的文档以了解更多信息。另一种方法是预先定义几个 linq 查询,然后允许用户将它们链接在一起。这应该是可行的,因为任何 Linq 查询都会返回一个 IEnumerable,可以由下一个 Linq 查询使用。

于 2008-09-22T10:00:25.010 回答
0

可以通过 System.Linq.Expressions 命名空间轻松创建 Lambda 表达式。

于 2008-09-22T10:12:40.830 回答
0

System.Linq.Expressions是您所需要的。我编写了一个不错的 UI,它允许用户以表达式树的形式动态定义和构建查询。然后,您可以将其交给 Linq2SQL 或您选择的客户端。

于 2009-09-22T21:49:28.780 回答
-1

我不明白你说的“最好的方法”是什么意思。最好提供您想要实现的简单示例。编写动态 LINQ 表达式并不难,但很棘手。

以下是动态 linq 表达式创建的示例:

如何编写现有的 Linq 表达式

于 2008-09-22T10:06:17.197 回答