动态LINQ和动态Lambda表达式?

时间:2008-09-22 09:47:20

标签: linq .net-3.5 dynamic lambda

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

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

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

6 个答案:

答案 0 :(得分: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

开始

绝对漂亮的代码。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

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

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

How do I compose existing Linq Expressions