Linq: как исключить условие, если параметр имеет значение null - PullRequest
8 голосов
/ 16 сентября 2011

У меня есть некоторая таблица и следующее условие запроса: если параметр A равен нулю, принять все, если нет, использовать его в запросе Я знаю, как сделать это в 2 этапа:

List<O> list = null;
if (A = null)
{
    list = context.Obj.Select(o => o).ToList();
}
else
{
    list = context.Obj.Where(o.A == A).ToList();
}

Возможно ли иметь один и тот же запрос? Спасибо

Ответы [ 4 ]

18 голосов
/ 16 сентября 2011

Как насчет:

list = context.Obj.Where(o => A == null || o.A == A)
                  .ToList();

РЕДАКТИРОВАТЬ: Вы можете сделать это в одном запросе, но все еще используя условие:

IEnumerable<O> query = context.Obj;
if (A != null)
{
    query = query.Where(o => o.A == A);
}
var list = query.ToList();
3 голосов
/ 03 декабря 2016

Я выбрал

var list = context.Obj.Where(o => A.HasValue ? o.a == A : true);
3 голосов
/ 16 сентября 2011

Я бы, вероятно, написал запрос следующим образом:

IQueryable<O> query = context.Obj;
if (A != null)
    query = query.Where(o => o.A == A);
var list = query.ToList()

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

Кроме того, этот код предполагает, что context.Obj это IQueryable<O> (например, вы используете LINQ to SQL).Если это не так, просто используйте IEnumerable<O>.

1 голос
/ 19 сентября 2011

1001 * попробовать *

context.Obj.Where(a => A != null && a.A == A).ToList()

все должно быть хорошо. Если A равно нулю, «a.A == A» будет игнорироваться.

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