Если вы точно знаете, что запрос LINQ дает один результат, вы набираете Single
.
Dim result = qryB.Single()
Если результата может не быть, но никогда не будет больше, чем вы, вы звоните SingleOrDefault
и результат может быть Nothing
.Если будет хотя бы один результат, но может быть больше, и вам нужен только первый, вы звоните First
.Если может быть ноль, один или несколько, и вам нужно первое, если оно есть, вы звоните FirstOrDefault
, и результат может быть Nothing
.
Обратите внимание, что некоторые поставщики LINQ не поддерживают оба варианта.Например, LINQ to Entities (поставщик LINQ для Entity Framework) поддерживает First
и FirstOrDefault
, но не Single
или SingleOrDefault
(если это не изменилось недавно), в то время как, если я не ошибаюсь, LINQ to SQL поддерживает Single
и SingleOrDefault
, но не First
или FirstOrDefault
.
Обратите внимание, что если вы собираетесь использовать ElementAt
, вам придется указать 0 в качестве индекса.ElementAt
работает почти так же, как индексирование массива или другого IList
, поэтому первый элемент имеет индекс 0. Вы можете использовать ElementAt
только для чего-то в середине результата запроса, учитывая, что у вас есть Single
, First
и Last
методы и их обнуляемые эквиваленты.