【问题标题】:build linq queries dynamically动态构建 linq 查询
【发布时间】:2012-12-10 15:58:44
【问题描述】:

假设我有一个字符串列表,比如

list<string> cols = {"id", "name", "position"}.

这个列表是动态生成的,这个列表中的每一个都代表一个数据库表中的一个列名。

我想要做的是动态创建一个 linq 查询,它只返回这些列。

var q = from e in employ
        select new {
          id = id,
          name = name,
          position = position
};

如何根据输入的列列表生成这样的查询?

【问题讨论】:

标签: linq


【解决方案1】:

正如 Chocoboboy 所说,System.Linq.Dynamic 会有所帮助。不幸的是,这不包含在 .NET 框架中,但您可以从 Scott Guthrie 的博客下载它。 在您的情况下,您需要致电 Select(string selector) (列列表硬编码或来自列表)。可选地,我的示例包括一个动态的 Where 子句 (Where("salary &gt;= 50")):

List<string> cols = new List<string>(new [] { "id", "name", "position" });
var employ = new[] { new { id = 1, name = "A", position = "Manager", salary = 100 },
    new { id = 2, name = "B", position = "Dev", salary = 50 },
    new { id = 3, name = "C", position = "Secretary", salary = 25 }
};
string colString = "new (id as id, name as name, position as position)";
//string colString = "new ( " + (from i in cols select i + " as " + i).Aggregate((r, i) => r + ", " + i) + ")";
var q = employ.AsQueryable().Where("salary >= 50").Select(colString);
foreach (dynamic e in q)
    Console.WriteLine(string.Format("{0}, {1}, {2}", e.id, e.name, e.position));

但是,这种方法在某种程度上违背了 LINQ 强类型查询的目的,所以我会谨慎使用它。

【讨论】:

    【解决方案2】:

    您可以使用表达式树来构建动态 Linq 查询。 这是一个例子:http://msdn.microsoft.com/en-us/library/bb882637.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多