Sonuçlar boş olduğunda LINQ ne döndürür?


319

LINQ sorgusu hakkında bir sorum var. Normalde bir sorgu bir IEnumerable<T>tür döndürür . İade boşsa, boş olup olmadığından emin olun. Aşağıdaki ToList()istisna veya sonuçta List<string>hiçbir şey bulunamadı eğer boş bir atacak emin değilim IEnumerable?

   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();

Çok basit bir soru olduğunu biliyorum, ama şimdilik VS mevcut değil.


11
Sonuç Enumerable olduğunu tahmin ediyorum.
David.Chu.ca

Yanıtlar:


512

Boş bir numaralandırılabilir dönecektir. Boş olmayacak. Ses uyuyabilirsin :)


38

.Any()Yöntemi de kontrol edebilirsiniz :

if (!YourResult.Any())

Sadece .Anykayıtları veritabanından alacak bir not ; bir iş yapmak .FirstOrDefault()/.Where()çok fazla bir yük olacak, ancak daha sonra sorgudan döndürülen nesneleri yakalayabileceksiniz.


5
Soru bir veritabanından nerede bahsediyor?
cja

4
Düzenleyen kişiye sormanız gerekecek, herhangi bir DB'den bahsetmedim :)
Noich

Nokta editör ses yapıyor olsa da, DB ya da değil. Söylediklerine inanıyorum .Any(), sadece herhangi bir eşleşen kayıtlarınız varsa, belirli bir değeri bulmak için gerçek bir sorgu yapmanın boş .Any()olmadığı zaman boş olabileceğini söyleyeceğim .
vapcguy

1
Düzenleme aslında yanlış olabilir. Varlıklara linq kullanılıyorsa, db buna kısayol verebilir ve istemciye doğru veya yanlış dışında hiçbir veri gönderilmez
Mafii

19
var lst = new List<int>() { 1, 2, 3 };
var ans = lst.Where( i => i > 3 );

(ans == null).Dump();  // False
(ans.Count() == 0 ).Dump();  // True

(Döküm LinqPad'den )


Kesinlikle! Bulguların daha iyi bir belirtisini elde edersiniz
netfed

TIL Count()de sadece bir yöntem değil, sadece mülkiyet
heyNow

2
.Any () kullanmamalısınız, çünkü sayım tüm öğeler arasında numaralandırılacaktır?
SHEePYTaGGeRNeP


8

Linq-to-SQL hiçbir sonuç ile bir sorgu üzerinde ilk öğe almaya çalışırsanız sequence contains no elementshata alırsınız . Belirtilen hatanın eşit olmadığından emin olabilirim object reference not set to an instance of an object. sonuç olarak hayır, null sequence contains no elementsher zaman söyleyeceğini söyleyemeyeceği için null döndürmez object reference not set to an instance of an object;)


1
Oh, açıklaman daha iyi anlaşmaya yardımcı olur. Teşekkür ederim !
Kay Lee

Bu soruya cevap veriyor mu?
ChiefTwoPencils

7

Buradaki diğer gönderiler, sonucun "boş" bir IQueryable olduğunu ve ToList'in () boş bir liste vb.

Bazı operatörlere dikkat edin, çünkü onlara boş bir numaralandırılabilir gönderirseniz fırlarlar. Bu, onları zincirlediğinizde olabilir.


3
"Bazı operatörlere dikkat edin, çünkü onlara boş bir numaralandırılabilir gönderirseniz fırlarlar. Bu, onları zincirlediğinizde olabilir." - Beni yakalayan bu. Sonra başka bir sorguya beslenen bir boş döndürülen değeri vardı. Bu, ikinci sorguya beslenen bir değer olmadığından, ne yaptığımdan bağımsız olarak ikinci sorgunun atmasına neden oldu.
trevorc

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.