Как узнать, вернет ли мой linq полезный объект или ноль - PullRequest
0 голосов
/ 06 июня 2019

Я работаю над веб-сервисом. Я использую linq для запроса базы данных. Казалось бы, просто, но я столкнулся с проблемой. Вот мой код для справки:

List<Comment> res = new List<Comment>();

using (ApplicationHistoryEntities ahe = new ApplicationHistoryEntities())
{
     res = (from columns in ahe.Comments
        where columns.NetforumId == actionuniqueid
            select columns).ToList();
}

Если у меня нет записей в базе данных, мой .ToList () выдаст ошибку? Я мог бы развернуть его и просто попробовать, но я хочу узнать больше о механизме, который использует мой linq. Если в базе данных ahe.Comments нет строк ... что вернет секция (from ...)?

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

Я нашел это Q: как узнать, возвращает ли мой запрос linq значение NULL , но кажется, что все ответы противоречат тому, как это действительно должно быть сделано ...

пример ответов:

  1. Либо вы можете преобразовать его в список, а затем проверить счет
  2. Наилучший подход - проверить, что в списке есть ноль (нет элементов), используйте Any () вместо count ()
  3. LINQ-запросы никогда не должны возвращать ноль, и вы не должны получать исключение, если результат пустой. Возможно, в вашем коде есть ошибка.
  4. Вы можете реализовать результат в виде списка, а затем проверить элементы.

Вы можете понять, почему я спрашиваю, как это работает.

Edit: Конечный код выглядит так:

List<Comment> res;
using (ApplicationHistoryEntities ahe = new ApplicationHistoryEntities())
{
    res = ahe.Comments?.Where(rowItem => rowItem.NetforumId == actionuniqueid).ToList() ??
          new List<Comment>().ToList();
}

1 Ответ

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

Посмотрите на этот пример:

List<string> test = new List<string>();
var test1 = test.Where(x => x == "a").ToList();

Если test существует, но пусто, запрос возвращает пустой список.Если test равно null, запрос выдает ошибку.Таким образом, вы можете адаптировать запрос следующим образом

List<string> test = new List<string>();
test = null;
var test1 = test?.Where(x => x == "a") ?? new List<string>().ToList();

Запрос теперь «безопасен».Оба приведенных выше примера возвращают пустой список, т.е. test1.Count() вернет ноль, но будет пригоден для использования.

Вы также можете посмотреть определения , где и ToList

...