Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq:int的和_Linq_Linq To Sql_Excel_Sum - Fatal编程技术网

Linq:int的和

Linq:int的和,linq,linq-to-sql,excel,sum,Linq,Linq To Sql,Excel,Sum,执行空语句的Sum()时,我得到“无法将空值分配给System.Int32类型的成员,该类型是不可为空的值类型”。 ResultView工作正常,但是 var r = from v in DataContext.Visits join bs in DataContext.BaseContents on v.BaseContentID equals bs.Id where (bs.CreatedBy == userId) && (v.DateVisi

执行空语句的Sum()时,我得到“无法将空值分配给System.Int32类型的成员,该类型是不可为空的值类型”。 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);
失败,出现相同的异常。

尝试此操作(已更新):


似乎在运行求和之前,输入
&&(v.Counter!=null)
会过滤掉该值的所有空值。

是否可以包含一些示例数据?至少您可以抓取r.ToList()并手动查看这些值。从我所能看到的来看,它应该工作得很好。还要确保v.BaseContentID、bs.Id和v.DateVisited不可为空。(尤其是ID列)引用的任何可为空的整数都可能导致该异常。不仅仅是Select子句中的那些


我已经尝试过了,编译时错误:运算符“??”无法应用于数据库中“int”和“int”类型的操作数,并且linq计数器不可为null:(我将返回并尝试找出为什么会得到任何null。如果类型为非null,并且您正在使用linq连接(与sql内部连接相同)那么你就不应该得到空值。有些东西不能相加。(可能是你问这个问题的原因)。解决方法是在求和之前检查Count(),但这看起来很愚蠢。
int number = r.Sum(v => (int?)v.Counter) ?? 0;
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);