Saat ini saya menggunakan satu permintaan di dua tempat untuk mendapatkan baris dari basis data.
BlogPost post = (from p in dc.BlogPosts
where p.BlogPostID == ID
select p).Single();
Kueri baik-baik saja ketika mengambil baris untuk memasukkan data ke kotak teks, tetapi mengembalikan kesalahan "Urutan tidak mengandung elemen" ketika digunakan untuk mengambil baris untuk mengeditnya dan memasukkannya kembali ke database. Saya tidak mengerti mengapa mungkin menemukan baris yang sesuai dalam satu contoh tetapi tidak yang lain.
(Menggunakan ASP.NET MVC dan LINQ)
Jawaban:
Letakkan breakpoint pada baris itu, atau Debug.Cetak sebelum itu, dalam kedua kasus dan lihat apa yang berisi ID.
sumber
Dari " Memperbaiki Kesalahan LINQ: Urutan tidak mengandung elemen ":
Ini juga dapat disebabkan oleh perintah berikut:
FirstAsync()
SingleAsync()
Last()
LastAsync()
Max()
Min()
Average()
Aggregate()
sumber
ctx.Rosters.First(c => c.RosterAccess == accCode);
<- rusakctx.Rosters.FirstOrDefault(c => c.RosterAccess == accCode);
<- BEKERJAMax
urutan kosongLastOrDefault()
juga dapat memicu kesalahan itu? Mengapa Saya pikir "OrDefault" adalah intinyaMohon gunakan
karena jika di baris pertama hasilnya tidak ada info instruksi ini masuk ke info default.
sumber
Apa yang ada di
ID
sini? Secara khusus, apakah ini variabel lokal? Ada beberapa ruang lingkup / masalah penangkapan, yang berarti bahwa mungkin diinginkan untuk menggunakan salinan variabel kedua, hanya untuk kueri:Juga; jika ini adalah LINQ-to-SQL, maka dalam versi saat ini Anda mendapatkan perilaku yang sedikit lebih baik jika Anda menggunakan formulir:
sumber
Ini akan menyelesaikan masalah,
sumber
Selain semua hal lain yang telah dikatakan, Anda dapat menelepon
DefaultIfEmpty()
sebelum meneleponSingle()
. Ini akan memastikan bahwa urutan Anda berisi sesuatu dan dengan demikian menghindari InvalidOperationException "Urutan tidak mengandung elemen". Sebagai contoh:sumber
Saya memiliki situasi yang serupa pada fungsi yang menghitung rata-rata.
Contoh:
Kasus Terpecahkan:
sumber
Alasan kesalahan:
Kueri
from p in dc.BlogPosts where p.BlogPostID == ID select p
mengembalikan urutan.Single()
mencoba mengambil elemen dari urutan yang dikembalikan pada langkah1.Sesuai pengecualian - Urutan yang dikembalikan pada langkah1 tidak mengandung elemen.
Tunggal () mencoba mengambil elemen dari urutan yang dikembalikan pada langkah1 yang tidak mengandung elemen.
Karena
Single()
tidak dapat mengambil elemen tunggal dari urutan yang dikembalikan pada langkah1, ia melempar kesalahan.Memperbaiki:
Pastikan kueri
(from p in dc.BlogPosts where p.BlogPostID == ID select p)
mengembalikan urutan dengan setidaknya satu elemen.
sumber