2011-12-29 33 views
7

Tôi có truy vấn:LINQ sum và null

var qq = (from c in db.tblArcadeGames 
     where 
      c.IsDeleted == false && 
      c.ParentGameID == 0 && 
      c.Approved == true 
     let aggPlays = c.Plays + db.tblArcadeGames.Where(v => v.ParentGameID == c.ID).Sum(v => (int?)v.Plays) 
     orderby aggPlays descending 
     select new { c, aggPlays }) 
     .Skip(Skip) 
     .Take(Fetch); 

foreach (var g in qq) 
{ 
    HttpContext.Current.Response.Write("{" + g.aggPlays + "}\n"); 
} 

Khi tôi in ra aggPlays trong vòng lặp trên họ đi ra như:

{21} 
{} 
{} 
{} 

Vấn đề có vẻ là rằng Sum() lợi nhuận null nếu không có hồ sơ tồn tại. Tôi không chắc chắn cách giải quyết vấn đề này để c.Plays + null không bằng null nhưng chỉ c.Plays.

Trả lời

16

Bạn có thể khắc phục điều này bằng cách không trở int?, nhưng thay vì chuyển sang một int trực tiếp:

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

Nhờ công trình này! Tại sao tổng của một tập trống rỗng mặc dù trong LINQ to sql? Tổng của một tập rỗng phải là 0 phải không? –

+1

@TomGullen * "' Sum() 'luôn luôn trả về 0 cho một chuỗi rỗng trong LINQ đồng bằng, có vẻ như nó là một thiếu LINQ to SQL, và thậm chí sau đó nó sẽ chỉ có thể nếu các giá trị bạn tổng là bản thân nullable (bởi vì nếu không thì kiểu trả về của Sum sẽ là đồng bằng * 'decimal' *, không *' decimal? '*)." * Từ http://connect.microsoft.com/VisualStudio/feedback/details/360365/linq-sum- phương thức trả về-giá trị – Rob

+0

@robjb không có cột nào là nullable, đây có phải là lỗi trong LINQ to sql không? –

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