Эффективный выбор первого элемента в запросе - PullRequest
2 голосов
/ 16 октября 2019

Некоторое время читал документы Microsoft LINQ в поисках правильного способа сделать это. Пример Microsoft следующий:

Customer custQuery =
    (from custs in db.Customers
    where custs.CustomerID == "BONAP"
    select custs)
    .First();

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

Есть ли способ вернуть первый результат и не продолжать запрос?

1 Ответ

4 голосов
/ 16 октября 2019

однако для меня это выглядит так, как будто запускает запрос, и после того, как это сделано, он выбирает первый

Нет. Запрос в скобках возвращает объект IQueryable, который в основном является представлением запроса, который еще не был выполнен. Только когда вы вызываете .First (), он действительно обрабатывает объект IQueryable и переводит его в запрос к базе данных, и, не глядя, я гарантирую, что он запрашивает базу данных только для первого элемента.

Однако, если выесли бы написать .ToList (). First () вместо просто .First () (и вы видите, что новички совершают эту ошибку менее очевидными способами), он действительно загрузит все в память и затем извлечет из нее первый объект.

Но вставленный вами код очень эффективен.

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