假设我有一个字符串列表,比如
list<string> cols = {"id", "name", "position"}.
此列表是动态生成的,此列表中的每个列表都代表数据库表中的列名。
我想要做的是动态创建一个linq查询,它只返回这些列。
var q = from e in employ
select new {
id = id,
name = name,
position = position
};
如何基于输入列列表生成类似的查询?
答案 0 :(得分:0)
正如Chocoboboy所说,System.Linq.Dynamic
会有所帮助。不幸的是,这不包含在.NET框架中,但您可以从Scott Guthrie的博客下载它。
在您的情况下,您需要调用Select(string selector)
(列表硬编码或来自列表)。或者,我的示例包含动态Where
子句(Where("salary >= 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强类型查询的目的,所以我会谨慎使用它。
答案 1 :(得分:0)
您可以使用表达式树来构建动态Linq查询。 以下是一个示例:http://msdn.microsoft.com/en-us/library/bb882637.aspx