动态LINQ和动态Lambda表达式?

14

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

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

如果这是一个新手问题,我很抱歉,但从经验中获得最佳实践将非常有帮助。

6个回答

11

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

明智的建议。我们对工作流程进行了配置,效果非常不错。 - David Robbins
唯一的缺点是你可能会遇到完全或部分信任的问题,这可能会阻止你的代码在ASP.NET中执行。 - viggity

1

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

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


0

System.Linq.Expressions 是你需要的。我编写了一个漂亮的用户界面,让用户以表达式树的形式动态定义和构建查询。然后,你可以将其交给 Linq2SQL 或你选择的客户端。


0

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


-1

我不明白你所说的“最佳方法”是什么意思。最好提供一个简单的例子来说明你想要实现什么。组合动态LINQ表达式并不难,但有些棘手。

这里是一个动态LINQ表达式创建的例子:

如何组成现有的Linq表达式


1
我不知道这些事情的“最佳实践”。我知道如何解决具体问题,但是一般的“最佳方式”太模糊了。 - aku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接