Я пишу то, что, по моему мнению, должно быть относительно простым приложением Windows Form. Я использую LINQ to SQL, хотя раньше никогда не использовал. У нас есть база данных SQL Server, и я создаю интерфейс для доступа к этой базе данных. Я пытаюсь найти наиболее эффективный способ поиска с его помощью нескольких (произвольного количества) параметров поиска.
В форме Windows я создаю словарь с каждым ключом поиска и его значением для поиска и передаю это в мой метод search (). Я пытаюсь найти способ поиска в базе данных по каждому из этих ключей и связанных с ними значений. Вот что я пытаюсь сделать:
public IQueryable<Product> Search(Dictionary<string, string> searchParams)
{
DBDataContext dc = new DBDataContext();
var query = dc.Products;
foreach (KeyValuePair<string, string> temp in searchParams)
{
query = query.Where(x => x.(temp.Key) == temp.Value);
}
return query;
}
Я понимаю, что синтаксически x. (Temp.Key) неверен, но я надеюсь, что это иллюстрирует то, что я пытаюсь сделать. Мне было интересно, есть ли другой способ сделать то, что я пытаюсь сделать, без необходимости делать гигантский оператор switch (или if / else if tree).
EDIT
Итак, я немного изменил его, но У меня все еще проблемы с этим. Вот что у меня сейчас есть:
public IQueryable<Product> Search(Dictionary<string, string> searchParams)
{
DBDataContext dc = new DBDataContext();
string sQuery = "";
foreach (KeyValuePair<string, string> temp in searchParams)
{
sQuery += temp.Key + "=" + temp.Value + " AND ";
}
var query = dc.Products.Where(sQuery);
return query;
}
Согласно статье библиотеки динамических запросов LINQ, это должно быть нормально. Вот ошибка, которую я получаю:
Аргументы типа для метода 'System.Linq.Queryable.Where (System.Linq.IQueryable, System.Linq.Expressions.Expression>)' не могут быть выведены из использования. Попробуйте явно указать аргументы типа.