Tergantung seberapa Anda menyukai sintaks kueri linq, Anda dapat menggunakan metode ekstensi secara langsung seperti:
var item = Items.First(i => i.Id == 123);
Dan jika Anda tidak ingin memunculkan kesalahan jika daftarnya kosong, gunakan FirstOrDefault
yang mengembalikan nilai default untuk tipe elemen ( null
untuk tipe referensi):
var item = Items.FirstOrDefault(i => i.Id == 123);
if (item != null)
{
// found it
}
Single()
dan SingleOrDefault()
juga dapat digunakan, tetapi jika Anda membaca dari database atau sesuatu yang sudah menjamin keunikan, saya tidak akan repot-repot karena harus memindai daftar untuk melihat apakah ada duplikat dan lemparan. First()
dan FirstOrDefault()
berhenti di pertandingan pertama, jadi mereka lebih efisien.
Dari keluarga First()
dan Single()
, inilah tempat mereka melempar:
First()
- melempar jika kosong / tidak ditemukan, tidak melempar jika duplikat
FirstOrDefault()
- mengembalikan default jika kosong / tidak ditemukan, tidak membuang jika duplikat
Single()
- melempar jika kosong / tidak ditemukan, melempar jika ada duplikat
SingleOrDefault()
- mengembalikan default jika kosong / tidak ditemukan, melempar jika ada duplikat
Single()
danSingleOrDefault()
JIKA saya tahu datanya sudah unik (misalnya dari database yang memiliki kendala itu, dll), karenaSingle()
memaksanya untuk memindai sisa daftar untuk menemukan kemungkinan duplikat, tapi itu saya. Jika Anda perlu menegakkan keunikan Anda saat ini, gunakanSingle()
keluarga, jika tidak, gunakanFirst()
keluarga.