【问题标题】:best way to build the dynamic linq queries in c#?在 C# 中构建动态 linq 查询的最佳方法?
【发布时间】:2012-01-07 15:33:40
【问题描述】:

我想知道在 LINQ 中构建动态查询的最佳方式是什么。查询将是复杂和嵌套的。在搜索时,我发现了几种方法:

  1. Linq 动态 (System.Linq.Dynamic)
  2. Albahari 的谓词构建器类
  3. Linq.Expression

可能有比这些更多的选择。哪种方式最好?

【问题讨论】:

  • 这真的取决于你的要求。当然可以使用它们中的任何一个。请告诉我们更多你的意图是什么
  • 这可能会有所帮助:stackoverflow.com/questions/1782577/…
  • @Polity:同意!但目前考虑需要构建基于Dynamic Linq 的搜索引擎。那么这是最好的方法...
  • @Red Swan,您是要允许您的用户输入 linq 表达式,还是要根据用户的配置附加一些预定义的规则?
  • @Polity,我想构建可能动态连接的查询。所以只专注于追加 where 条件是不够的。

标签: c# linq dynamic


【解决方案1】:

这取决于你的情况:你需要多快,你的起点是什么,等等。在一个不受约束的世界里,我认为最好的办法是推出你自己的库来构建动态查询。您可以使用 Scott 或 Joseph 的作品作为灵感,但最终这一切都在 Linq.Expression 库中“触底”。

“自己动手”方法的一个优点是您不需要从您的代码过渡到某人的框架。相反,您将直接对 .NET API 进行编码。当您已经拥有动态查询的表示时,这可能很有用,例如,在您通过 UI 呈现给用户的模型中、在 XML 文件中等。您所需要的只是递归地遍历该表示,并生成 System .Linq.Expression 作为返回值。

FWIW,我的公司在 .NET 3.5 推出时采用了这种方法,我们对结果非常满意。

【讨论】:

  • 当然,我正计划为此建立自己的库。但截至目前,构建搜索引擎的要求优先级很高。我现在正在考虑快速使用现有的源代码。我想知道哪个是最好的问题...任何更正和建议都将适用...
  • @RedSwan 如果您需要快速构建一些东西,Linq.Dynamic 应该可以解决问题:it lets you build queries from strings 所以您只需要提供一个字符串表示您的搜索条件。
【解决方案2】:

Linq 查询可以用两种方式编写,您可以使用任何类型的嵌套。

查询语法

IEnumerable<int> numQuery1 = 
        from num in numbers
        where num % 2 == 0
        orderby num
        select num;

方法语法

 IEnumerable<int> numQuery2 = numbers.Where(num => num % 2 == 0).OrderBy(n => n);

有关 Linq 的更多信息,您可以访问 Microsoft 的LINQ (Language-Integrated Query)。它包含从入门到示例教程的所有内容

【讨论】:

  • @Pankaj:感谢 Pankaj 的回答。实际上,您给出的答案确实与问题无关。我想给搜索引擎加注。我知道如何使用 orderby 和其他子句,但不幸的是无法动态构建 Linq 查询...
猜你喜欢
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多