Когда использовать .First и когда использовать .FirstOrDefault с LINQ?

Вам нужно знать, как вы можете убедиться, что lib был загружен успешно. Например:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js"></script>
<script>window.jQuery || document.write('<script src="js/jquery.min.js">\x3C/script>'</script>

Итак, это попытка загрузить jQuery (1.5.1) из CDN Google. Поскольку метки <script> блокируют общий рендеринг & amp; (если явно не указано иное), мы можем проверить сразу после этого, если объект jQuery находится внутри window. Если нет, просто отбросьте, записав в документ еще один тег <script>, ссылаясь на локальную копию.

774
задан BoltClock 3 December 2011 в 22:03
поделиться

6 ответов

I would use First() when I know or expect the sequence to have at least one element. In other words, when it is an exceptional occurrence that the sequence is empty.

Use FirstOrDefault() when you know that you will need to check whether there was an element or not. In other words, when it is legal for the sequence to be empty. You should not rely on exception handling for the check. (It is bad practice and might hurt performance).

Finally, the difference between First() and Take(1) is that First() returns the element itself, while Take(1) returns a sequence of elements that contains exactly one element.

782
ответ дан 22 November 2019 в 21:19
поделиться

.First will throw an exception when there are no results. .FirstOrDefault won't, it will simply return either null (reference types) or the default value of the value type. (e.g like 0 for an int.) The question here is not when you want the default type, but more: Are you willing to handle an exception or handle a default value? Since exceptions should be exceptional, FirstOrDefault is preferred when you're not sure if you're going to get results out of your query. When logically the data should be there, exception handling can be considered.

Skip() and Take() are normally used when setting up paging in results. (Like showing the first 10 results, and the next 10 on the next page, etc.)

Hope this helps.

264
ответ дан 22 November 2019 в 21:19
поделиться

.First() will throw an exception if there's no row to be returned, while .FirstOrDefault() will return the default value (NULL for all reference types) instead.

So if you're prepared and willing to handle a possible exception, .First() is fine. If you prefer to check the return value for != null anyway, then .FirstOrDefault() is your better choice.

But I guess it's a bit of a personal preference, too. Use whichever makes more sense to you and fits your coding style better.

112
ответ дан 22 November 2019 в 21:19
поделиться

Прежде всего, Take - это совершенно другой метод. Он возвращает IEnumerable , а не один T , так что этого нет.

Между First и FirstOrDefault следует использовать First , если вы уверены, что элемент существует, а если нет, то возникает ошибка. .

Кстати, если ваша последовательность содержит элементов по умолчанию (T) (например, null ), и вам нужно различать между пустым и первым элементом null , вы не можете использовать FirstOrDefault .

19
ответ дан 22 November 2019 в 21:19
поделиться

Я нашел веб-сайт, который, кажется, объясняет необходимость FirstOrDefault
http://thepursuitofalife.com/the-linq-firstordefault-method-and-null-resultsets/
Если нет результатов для запрос, и вы хотите вызвать First () или Single (), чтобы получить одну строку ... Вы получите исключение «Последовательность не содержит элементов».

Отказ от ответственности: я никогда не использовал LINQ, поэтому приношу свои извинения, если это далеко не так.

3
ответ дан 22 November 2019 в 21:19
поделиться
someList.First(); // exception if collection is empty.
someList.FirstOrDefault(); // first item or default(Type)

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

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

Код:

var transactionsOnWorkingDay = GetTransactionOnLatestWorkingDay();
var justNeedOneToProcess = transactionsOnWorkingDay.First(): //Not FirstOrDefault()

Я хотел бы увидеть другие комментарии по этому поводу.

2
ответ дан 22 November 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: