【问题标题】:How do I build up LINQ dynamically如何动态构建 LINQ
【发布时间】:2010-11-20 12:27:46
【问题描述】:

我有一个场景,我有自定义配置的列名、关联运算符(如 = between 等),然后是关联的值。

我正在尝试确定是否可以使用动态(字符串)where 子句构建 LINQ 查询?

我注意到 Predicate.OR Predicate.AND 的东西,但这并不是我要说的。

有什么建议吗?

【问题讨论】:

标签: linq dynamic operators


【解决方案1】:

如果您在谈论 string Where 子句(而不是自己构建表达式等)-那么 Dynamic LINQ Library(在 3.5 示例中,IIRC)就足够了。

请注意,以下示例用于数据库使用;但是您可以通过在内存数据上调用 .AsQueryable() 来将其与 LINQ-to-Objects 一起使用。

【讨论】:

  • 虽然 Alex 是第一个使用 Dynamic LINQ 库的,但缺少的部分是由 Marc 提出的(很抱歉错过了)。您需要 .AsQueryAble() 扩展方法才能使用您的集合。
【解决方案2】:

实际上,有一个来自 Microsoft 的特定库 (System.Linq.Dynamic) 附带了支持此功能的 C# VS2008 示例。从here (Microsoft Download)获取它

该库包含在上述下载示例的\LinqSamples\DynamicQuery 目录中。

更多用法示例请查看此页面:http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

【讨论】:

  • 好的,System.Linq.Dynamic 乍一看正是我想要的。但是动态 linq 仅适用于 IQueryable 而不是 IEnumerable。所以这仍然留下了一点问题。
  • @Jabezz 这不是问题,由于IQueryable 的设计和意图,它应该只适用于IQueryable。 (阅读 This article 以更好地了解 IQueryable 如何按需返回数据。)有一个 IEnumerable.AsQueryable 扩展方法允许您根据您的 IEnumerable 获取 IQueryable。
【解决方案3】:

【讨论】:

  • 这比使用 DynamicLinq 更安全,DynamicLinq 似乎很容易注入漏洞。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多