Linq:int的和

我得到“ 空值不能分配给typesSystem.Int32这是一个非空值types的成员 ”执行我的空语句的Sum()。 ResultView工作正常,但也是

var r = from v in DataContext.Visits join bs in DataContext.BaseContents on v.BaseContentID equals bs.Id where (bs.CreatedBy == userId) && (v.DateVisited.Year == workDate.Year) && (v.DateVisited.Month == workDate.Month) && (v.DateVisited.Day == workDate.Day) && (v.IsPreviewed == false) && (bs.ProfileProjectId != null) select v; int? number = r.Sum( v => v.Counter); 

 var r = from v in DataContext.Visits join bs in DataContext.BaseContents on v.BaseContentID equals bs.Id where (bs.CreatedBy == userId) && (v.DateVisited.Year == workDate.Year) && (v.DateVisited.Month == workDate.Month) && (v.DateVisited.Day == workDate.Day) && (v.IsPreviewed == false) && (bs.ProfileProjectId != null) select v.Counter; int? number = r.Sum(v); 

以相同的例外失败。

试试这个( 更新 ):

 int number = r.Sum(v => (int?)v.Counter) ?? 0; 

你能包括一些样本数据吗? 至less你可以抓取r.ToList()并手工查看值。 从我可以看到这看起来应该工作正常。 还要确保v.BaseContentID,bs.Id和v.DateVisited不可为空。 (特别是ID列)引用的任何可空的整数都可能导致该exception。 不仅仅是Select子句中的那些

 var r = from v in DataContext.Visits join bs in DataContext.BaseContents on v.BaseContentID equals bs.Id where (bs.CreatedBy == userId) && (v.DateVisited.Date == workDate.Date) && (!v.IsPreviewed) && (bs.ProfileProjectId.HasValue) select v; int? number = r.Sum(v => v.Counter); 

似乎把&& (v.Counter != null)会在运行总和之前过滤掉所有的空值。