2013-09-12 6 views
2

У меня есть таблица, где я хочу сделать запрос на переменные столбцы. как:C# Linq Column Name as variable

private void query(string column, string value) { 

    using (var db = new myDB()) { 

     var s1 = (from c in db.Components 
        where (**column** == **value**) 
        select new {c.id, **column**}); 
    } 
} 

позволяет сказать, что я хочу, чтобы искать поставщика, то это было бы как:

var s1 = (from c in db.Components 
      where (c.supplier == "abc") 
      select new {c.id, c.supplier}); 

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

+0

см [этот вопрос SO] (http://stackoverflow.com/questions/2148309/how-do-i-reference-a-field-in-linq-based-on-a-dynamic- fieldname) –

+0

и, пожалуйста, сделайте правильный поиск, прежде чем публиковать новый вопрос здесь, в SO, потому что он повреждает ваше репо. –

+0

Вы также можете использовать [Библиотека динамического запроса] (http://weblogs.asp.net/scottgu/archive/2008/ 01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx) – Nilesh

ответ

0

Этот пример может быть полезно я думаю.

void BindGridTypeSafe() 
    { 
     NorthwindDataContext northwind = new NorthwindDataContext(); 

     var query = from p in northwind.Products 
        where p.CategoryID == 3 && p.UnitPrice > 3 
        orderby p.SupplierID 
        select p; 

     GridView1.DataSource = query; 
     GridView1.DataBind(); 
    } 

    void BindGridDynamic() 
    { 
     NorthwindDataContext northwind = new NorthwindDataContext(); 

     var query = northwind.Products 
          .Where("CategoryID = 3 AND UnitPrice > 3") 
          .OrderBy("SupplierID"); 

     GridView1.DataSource = query; 
     GridView1.DataBind(); 
    } 
+1

thx для примера, i попробовал это, но это бросило меня в исключение. Я узнал, что, поскольку im использует сущность, обязательно писать it.COLUMNNAME (it.supplier). который решил мою проблему с использованием динамического linq. СПАСИБО! – Patrick

2

Хороший способ заключается в использовании Dynamic Linq

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

Что-то вроде:

var s1 = (from c in db.Components 
    where(column + "=" + value) 
    select new {c.id, **column**}); 
+0

тот же пример, что и выше, пользователь, упомянутый с помощью entityframework, и обязательный для записи. COLUMNNAME –