Залежить від того, наскільки вам подобається синтаксис запиту linq, ви можете використовувати методи розширення безпосередньо так:
var item = Items.First(i => i.Id == 123);
Якщо ви не хочете видавати помилку, якщо список порожній, використовуйте FirstOrDefault
яке повертає значення за замовчуванням для типу елемента ( null
для еталонних типів):
var item = Items.FirstOrDefault(i => i.Id == 123);
if (item != null)
{
// found it
}
Single()
і SingleOrDefault()
також можна використовувати, але якщо ви читаєте з бази даних або щось, що вже гарантує унікальність, я б не заважав, оскільки він повинен сканувати список, щоб побачити, чи є дублікати та кидки. First()
і FirstOrDefault()
зупиніться на першому матчі, щоб вони були більш ефективними.
З First()
і Single()
сім'ї, ось де вони кидають:
First()
- кидає, якщо порожній / не знайдений, не кидає, якщо дублікат
FirstOrDefault()
- повертає за замовчуванням, якщо порожній / не знайдений, не кидає, якщо дублікат
Single()
- кидає, якщо порожній / не знайдений, кидає, якщо дублікат існує
SingleOrDefault()
- повертає за замовчуванням, якщо порожній / не знайдений, кидає, якщо дублікат існує
Single()
іSingleOrDefault()
якщо я знаю, дані вже унікальні (наприклад, із бази даних, яка має таке обмеження тощо), оскількиSingle()
змушує її сканувати решту списку, щоб знайти можливий дублікат, але це я. Якщо вам потрібно на цей час нав'язати свою унікальність, використовуйтеSingle()
сімейство, якщо ні - використовуйтеFirst()
сімейство.