Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态LINQ和动态Lambda表达式?_Linq_.net 3.5_Dynamic_Lambda - Fatal编程技术网

动态LINQ和动态Lambda表达式?

动态LINQ和动态Lambda表达式?,linq,.net-3.5,dynamic,lambda,Linq,.net 3.5,Dynamic,Lambda,动态编写LINQ查询和Lambda表达式的最佳方法是什么 我想到的应用程序中,最终用户可以设计业务逻辑规则,然后必须执行这些规则 如果这是一个新手问题,我很抱歉,但是从经验中获得最佳实践将是非常好的。我可以看到两种动态生成lambda的方法。您可以尝试Reflection.Emit直接生成IL(即.Net字节码)并将其作为lambda调用,也可以使用System.CodeDom和Microsoft.CSharp.CSharpCodeProvider从更高级别的构造生成代码。您想做什么取决于您希望

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

我想到的应用程序中,最终用户可以设计业务逻辑规则,然后必须执行这些规则


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

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


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

另一种可能性是将脚本运行时集成到程序中,以便用户可以在DSL中编写业务逻辑。我不明白你说的“最佳方式”是什么意思。最好提供一个简单的例子来说明你想要实现的目标。编写动态LINQ表达式并不困难,但很棘手

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


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

我不能推荐比您阅读Bart De Smet()的帖子更高的表达式,他在Lambda方面非常出色

他最近的系列报道了动态Lambda,从


绝对漂亮的代码。

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

我不知道这类事情的“最佳实践”。我知道如何解决具体的问题,但一般的“最佳方法”是太模糊的问题。合理的建议。我们这样做是为了配置工作流,它工作得非常好。唯一的缺点是,您可能会遇到完全/部分信任问题,这将阻止您的代码在asp.net中执行