Как использовать логическую альтернативу в динамическом методе построения запросов c - PullRequest
0 голосов
/ 02 мая 2020

Итак, в основном я пытаюсь создать динамический c sql запрос. Пользователь выбирает как минимум двух сотрудников через пользовательский интерфейс и хочет получить их график. Я не могу найти решение о том, как автоматизировать процесс построения запроса, не вдаваясь в разбор строк.

Взгляните на этот код:

List<OneEmployee> list = Employees.Where(each => each.Id == 1 || each.Id == 2).ToList();
...
IQueryable<OneDayInSchedule> query = context.Schedule.Where(each => each.property >= 10);

    foreach (var v in list)
    {
        query = query.Where(each => each.Id == v.Id);
    }

Код, показанный выше, не годится поскольку каждое предложение ".Where" является логической суммой. Посмотрите на запрос SQL, представляющий код.

SELECT * FROM Schedule WHERE property >= '10' AND Id = '1' AND Id = '0';

Меня интересует логическая альтернатива:

SELECT * FROM Schedule WHERE property >= '10' AND (Id = '1' OR Id = '0');

Я сидел на этом в течение последних нескольких дней, и я не могу найти решение. Есть ли такие, которые не требуют разбора строк?

1 Ответ

0 голосов
/ 02 мая 2020

Вы можете использовать построитель предикатов, используя LinqKit (доступный от NuGet).

Посмотрите здесь

Затем вы можете сделать что-то вроде:

List<OneEmployee> list = Employees.Where(each => each.Id == 1 || each.Id == 2).ToList();
...
IQueryable<OneDayInSchedule> query = context.Schedule.Where(each => each.property >= 10);

var predicate = PredicateBuilder.New<OneDayInSchedule>();

foreach (var v in list)
{
  predicate = predicate.Or(each => each.Id == v.Id);
}

query.Where(predicate);

....
query.ToList();
....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...