2010-01-24 22 views
10

resultset döndürmeden önce bir kaydın varlığını kontrol edin Ben veri almak için girişmeden önce bir kayıt olup olmadığını doğrulamak için standart çöp önemsiz yolumun yerine geçmek için basit bir çözüm arıyorum. Benim yöntemlerden biri olarak adlandırılırlar her Şu anda, ben ... etkisiyle Hep bir kaydın varlığını belirlemek için kayıt sayısını kontrolLINQ to SQL

private Record DoSomething(int id) 
{ 
    if(data.Records.Count(q=>q.Id==id) > 0) 
    { 
     return data.Records.First(q=>q.Id==id); 
    } 
    return null; 
} 

... bir şeyler yap. Veritabanını iki kez çağırmadan, bunu yapmanın daha "zarif" bir yolu olmalı. Bir yolu var mı?

cevap

15

Bunu işlemek için birçok temiz yol vardır. İlk Recordid tekabül istiyorsanız söyleyebilirsiniz:

return data.Records.Any(r => r.Id == id); // true if exists 

böyle Record var kaç sayımını istiyorsanız:

Record record = data.Records.FirstOrDefault(r => r.Id == id); 
if(record != null) { 
    // record exists 
} 
else { 
    // record does not exist 
} 

sadece böyle Record var olan bir olmadığını bilmek istiyorum :

return data.Records.Count(r => r.Id == id); 

Bu şekilde tümbir sayımını (IEnumerable<Record>) istiyorsanız:

return data.Records.Where(r => r.Id == id); 
+0

Birden fazla kayıt döndürülürse SingleOrDefault bir istisna durumu düşünüyorum. Bir Id sorgusu gibi göründüğü için, SingleOrDefault'un iyi olacağını varsaymak muhtemelen güvenlidir, ancak FirstOrDefault daha geneldir. –

+2

'Herhangi bir (r => r = ID == id)', daha verimli olduğundan ('COUNT' yerine "EXISTS" ile sonuçlanacak) tercih edilir. – JulianR

1
Record record = data.Records.FirstOrDefault(q => q.Id == id); 
return record;