Linq to sql / C # - несколько, где поиск по парам ключ / значение - PullRequest
3 голосов
/ 30 октября 2010

Я новичок в Linq to Sql и пытаюсь сделать следующее в C #.

У меня есть таблица, в которой хранится ключ / значение (в ней также есть fk для пользователя). Я хочу выполнить поиск по ключевым именам и значениям как или. На внешнем интерфейсе я разрешаю им добавлять «фильтры», которые являются именами ключей, после чего они могут искать значение. Таким образом, они могут искать N элементов, где N - количество фильтров.

В простом sql, где N = 3, это будет выглядеть следующим образом. datakey и datavalue - это столбцы в таблице (varchar (255)).

SELECT * from table
 where (datakey='option1' and datavalue='value1')
    or (datakey='option2' and datavalue='value2')
    or (datakey='option3' and datavalue='value3')

Ответы [ 3 ]

1 голос
/ 30 октября 2010

Theres технология под названием DynamicQuery, которая позволит вам создавать выражения LINQ через строку, что может оказаться полезным

1 голос
/ 31 октября 2010

Да, как сказал Джаспер , вы можете использовать динамическую библиотеку запросов LINQ для достижения желаемого.

Вот быстрый и грязный пример (примечание: я не проверял этот точный код):

List<string> options = new List<string>();
List<string> values = new List<string>();

options.Add("option1");
values.Add("value1");
options.Add("option2");
values.Add("value2");

StringBuilder queryString = new StringBuilder();

for (int i = 0; i < options.Count; i++)
{
    if (queryString.Length > 0)
        queryString.Append(" Or ");

    queryString.Append(string.Format("(datakey = \"{0}\" And dataValue = \"{1}\")", options[i], values[i]));
}

var query = context.YourTable.Where(queryString.ToString());
0 голосов
/ 30 октября 2010

Используйте эквивалентные операторы C #, && и ||:

from t in context.table
where (t.datakey == "option1" && datavalue == "value1")
   || (t.datakey == "option2" && datavalue == "value2")
   || (t.datakey == "option3" && datavalue == "value3")
select t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...