LINQ, выберите, где заголовок соответствует, иначе, если объект равен нулю - PullRequest
0 голосов
/ 24 декабря 2009

У меня есть базовая настройка системы поиска тегов, у каждого тега есть поле для идентификатора категории. Некоторые теги не будут иметь категории.

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

public IQueryable<Tag> List(string category)
{
 //...
}

Я хочу вернуть теги без категории, если ничего не пропущено. Это работает, если я напишу запрос, как это ...

return t from db.Tags
       where t.Category == null
       select t;

Однако тогда мне нужно два запроса (один, если он нулевой, другой, если нет) Мне было интересно, могу ли я сделать все это в одном запросе для упрощения.

Текущий запрос ...

return t from db.Tags
       where t.Category.Name == name
       select t;

Ответы [ 2 ]

1 голос
/ 25 декабря 2009
db.Tags
.Where(t=> Category==null?t.Category==null:t.Category.Name==Category);
0 голосов
/ 24 декабря 2009

Я думаю, что это лучший способ:

if(name == null)
    return t from db.Tags
           where t.Category.Name == null
           select t;
else
    return t from db.Tags
           where t.Category != null && t.Category.Name == name
           select t;

Вы не хотите выполнять более сложный запрос на сервере БД, чем необходимо. Если вы объедините 2, что, вероятно, возможно, запрос также будет содержать проверку ISNULL для имени.

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