Что такое чистый запрос LINQ, чтобы получить элементы без дочерних элементов? - PullRequest
0 голосов
/ 22 июля 2011

У меня есть запрос ниже, который работает, но мне было интересно, есть ли более чистый способ его реализации.

var query = Context.Alerts
                .Where(a => a.AlertsDismisseds.Where(d => d.AlertID == a.AlertID)
                .Count() == 0)
                .Select(a => a);

Я ищу, чтобы выбрать все оповещения из таблицы, если их нет в AlertsDismissedsТаблица.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 22 июля 2011
var query = Context.Alerts
                .Where(a => !Context.AlertsDismissed.Any(d => d.AlertID == a.AlertID))
0 голосов
/ 22 июля 2011

Как уже было сказано Femaref, вы можете использовать:

var query = Context.Alerts
            .Where(a => !Context.AlertsDismissed.Any(d => d.AlertID == a.AlertID));

И вот почему:

  • Any(predicate) возвращает true, если какие-либо элементы в IEnumerable проходятпредикат (и сделает это, как только он это сделает), так что это предпочтительнее, чем Count(predicate) > 0 (который будет перечислять всю последовательность).

  • Select () выполняет проекцию, преобразовываяIEnumerable<Input> в и IEnumerable<Output>, поэтому Select(a => a) фактически ничего не делает.

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