2012-06-13 4 views
3

Предположим, у меня есть список строк, каксборки LINQ запросы динамически

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

Этот список генерируется динамически, и каждый из них в этом списке представляет имя столбца в таблице базы данных.

то, что я хочу сделать, это создать динамический запрос linq, который возвращает только эти столбцы.

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

Как я могу сгенерировать такой запрос на основе списков столбцов ввода?

+0

Динамический Линк http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-query- library.aspx может это сделать – Chocoboboy

ответ

0

Как сказал Чокобобой, System.Linq.Dynamic поможет. К сожалению, это не включено в .NET framework, но вы можете загрузить его из блога Скотта Гатри. В вашем случае вам необходимо позвонить 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 сильно типизированных запросов, поэтому я хотел бы использовать его с осторожностью.