Saya punya pertanyaan tentang permintaan LINQ. Biasanya permintaan mengembalikan IEnumerable<T>
tipe. Jika pengembaliannya kosong, tidak yakin apakah itu nol atau tidak. Saya tidak yakin apakah yang berikut ToList()
akan melempar pengecualian atau hanya kosong List<string>
jika tidak ada IEnumerable
hasil yang ditemukan ?
List<string> list = {"a"};
// is the result null or something else?
IEnumerable<string> ilist = from x in list where x == "ABC" select x;
// Or directly to a list, exception thrown?
List<string> list1 = (from x in list where x == "ABC" select x).ToList();
Saya tahu ini adalah pertanyaan yang sangat sederhana, tetapi saya tidak memiliki VS untuk saat ini.
Jawaban:
Ini akan mengembalikan enumerable kosong. Tidak akan null. Anda bisa tidur nyenyak :)
sumber
Anda juga dapat memeriksa
.Any()
metode ini:Hanya catatan yang
.Any
masih akan mengambil catatan dari database; melakukan.FirstOrDefault()/.Where()
akan sama banyak overhead tetapi Anda kemudian akan dapat menangkap objek yang dikembalikan dari permintaansumber
.Any()
hanya akan memberi tahu Anda jika Anda memiliki catatan yang cocok, sama sekali, di mana melakukan permintaan aktual untuk menemukan nilai tertentu mungkin nol ketika.Any()
tidak.(Dump dari LinqPad )
sumber
Count()
juga merupakan metode, bukan hanya properti.ToList mengembalikan daftar kosong. (sama dengan Daftar baru ());
sumber
Di Linq-to-SQL jika Anda mencoba untuk mendapatkan elemen pertama pada kueri tanpa hasil Anda akan mendapatkan
sequence contains no elements
kesalahan. Saya dapat meyakinkan Anda bahwa kesalahan yang disebutkan tidak sama denganobject reference not set to an instance of an object
. dalam kesimpulan tidak, itu tidak akan mengembalikan nol karena nol tidak bisa mengatakansequence contains no elements
itu akan selalu mengatakanobject reference not set to an instance of an object
;)sumber
Posting lain di sini telah memperjelas bahwa hasilnya adalah IQueryable "kosong", yang akan diubah ToList () menjadi daftar kosong dll.
Berhati-hatilah dengan beberapa operator, karena mereka akan membuang jika Anda mengirim mereka enumerable kosong. Ini bisa terjadi ketika Anda rantai mereka bersama.
sumber
Itu tidak akan membuang pengecualian, Anda akan mendapatkan daftar kosong.
sumber