Что возвращает LINQ, когда результаты пустые

У меня вопрос о запросе LINQ. Обычно запрос возвращает тип IEnumerable. Если возврат пуст, не уверен, что оно равно null или нет. Я не уверен, что следующий ToList() будет генерировать исключение или просто пустой список <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.

Ответ 1

Он вернет пустое перечисление. Это не будет null. Вы можете спать звук:)

Ответ 2

Вы также можете проверить метод .Any():

if (!YourResult.Any())

Просто обратите внимание, что .Any все равно будет извлекать записи из базы данных; выполнение .FirstOrDefault()/.Where() будет таким же накладным, но вы могли бы поймать объект (ы), возвращенный из запроса

Ответ 3

var lst = new List<int>() { 1, 2, 3 };
var ans = lst.Where( i => i > 3 );

(ans == null).Dump();  // False
(ans.Count() == 0 ).Dump();  // True

(Дамп от LinqPad)

Ответ 4

.ToList возвращает пустой список. (так же, как новый List());

Ответ 5

В Linq-to-SQL, если вы попытаетесь получить первый элемент запроса без результатов, вы получите ошибку sequence contains no elements. Я могу заверить вас, что указанная ошибка не равна object reference not set to an instance of an object. в заключении нет, он не будет возвращать null, так как null не может сказать sequence contains no elements он всегда будет говорить object reference not set to an instance of an object;)

Ответ 6

Другие сообщения здесь дали понять, что результатом является "пустой" IQueryable, который ToList() будет корректно изменен как пустой список и т.д.

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

Ответ 7

Он не будет генерировать исключение, вы получите пустой список.