2011-12-29 36 views
7

Ben sorgu varLinq toplamı ve boş

{21} 
{} 
{} 
{} 

sorun gibi görünüyor Sum() döner null kayıt yoksa. Bu şekilde nasıl geçeceğimi bilmiyorum, böylece c.Plays + nullnull eşit değil ama sadece c.Plays.

cevap

16

Sen int? döndürerek değil Bunu düzeltmek değil, doğrudan doğruya bir int için dönüştürebilirsiniz: Bu işleri

.Sum(v => v.Plays ?? 0) 
+0

Teşekkür! Neden boş bir kümenin toplamı linq'de sql olarak belirtiliyor? Boş bir setin toplamı 0 olmalıdır. –

+1

@TomGullen * "' Sum() 'her zaman düz LINQ içinde boş bir sıra için 0 döndürür, SQL eksiklik için bir LINQ olduğu gibi görünür ve o zaman bile sadece toplam değerleri null olamazsa mümkün olmalıdır (aksi halde, Sum'un dönüş türü düz * * ondalık *, değil * ondalık? *) olacaktır. * * http://connect.microsoft.com/VisualStudio/feedback/details/360365/linq-sum- method-return-value – Rob

+0

@robjb sütunların hiçbiri null olamaz, bu linq'de sql için bir hata olur mu? –

1
int response = 
    (from p in data.tbHoraires 
    where p.eid == eid && p.annee == annee && p.obligatoire == true 
    select (int?)p.nbminute ?? 0).Sum();