У меня вопрос по поводу запроса LINQ. Обычно запрос возвращает IEnumerable<T>
тип. Если возврат пустой, не уверен, что он нулевой или нет. Я не уверен, будет ли следующее ToList()
исключение или просто пустым, List<string>
если ничего не найдено в IEnumerable
результате?
List<string> list = {"a"};
// is the result null or something else?
IEnumerable<string> ilist = from x in list where x == "ABC" select x;
// Or directly to a list, exception thrown?
List<string> list1 = (from x in list where x == "ABC" select x).ToList();
Я знаю, что это очень простой вопрос, но у меня пока нет VS.
Ответы:
Он вернет пустой перечислимый. Это не будет нулевым. Вы можете спать спокойно :)
источник
Вы также можете проверить
.Any()
метод:Просто примечание, которое
.Any
все равно будет извлекать записи из базы данных; выполнение a.FirstOrDefault()/.Where()
будет таким же накладным расходом, но тогда вы сможете поймать объект (ы), возвращенный из запросаисточник
.Any()
что просто скажут вам, есть ли у вас какие-либо совпадающие записи, где выполнение фактического запроса для поиска определенного значения может быть нулевым, если.Any()
нет.(Дамп от LinqPad )
источник
Count()
- это тоже метод, а не просто свойство.ToList возвращает пустой список. (так же, как новый список ());
источник
В Linq-to-SQL, если вы попытаетесь получить первый элемент запроса без результатов, вы получите
sequence contains no elements
ошибку. Я могу заверить вас, что упомянутая ошибка не равнаobject reference not set to an instance of an object
. в заключение нет, он не вернет ноль, так как нуль не может сказать,sequence contains no elements
что всегда будет говоритьobject reference not set to an instance of an object
;)источник
Другие посты здесь прояснили, что результатом является «пустой» IQueryable, который ToList () будет правильно менять на пустой список и т. Д.
Будьте осторожны с некоторыми из операторов, так как они будут выбрасывать, если вы отправите им пустой перечислимый. Это может произойти, когда вы соедините их вместе.
источник
Это не будет исключение, вы получите пустой список.
источник