Каков правильный синтаксис для использования выражения в запросе Linq? - PullRequest
0 голосов
/ 24 июня 2019

Я создал выражение для целей фильтрации оператора Linq:

Expression<Func<Driver, bool>> expression = null;

Это определяется на основе значения параметра действия:

switch (driver_type)
{
    case "all": // remove any filters related to `driver_type`
        expression = d => true;
        break;
    case "licensed":
        expression = d => !(new string[] { "A", "B" }).Contains(d.DriverType);
        break;
    case "unlicensed":
        expression = d => d.DriverType == "D";
        break;
    default:
        expression = d => !(new string[] { "A", "B" }).Contains(d.DriverType);
        break;
}

, которое затем используетсячтобы отфильтровать запрос Linq:

drivers = await (
    from driver in _context.Drivers
    where
        (driver.Active == true)
        && expression <-- invalid
    orderby driver.LastName, driver.FirstName
    select driver
).ToListAsync();

Какой правильный синтаксис для этого?

Кстати, существует ли способ для параметра переключателя default использовать выражение, сгенерированноеlicensed опция?

1 Ответ

2 голосов
/ 24 июня 2019

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

drivers = await _context.Drivers
    .Where(driver => driver.Active)
    .Where(expression)
    .OrderBy(driver => driver.LastName)
    .ThenBy(driver => driver.FirstName)
    .ToListAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...