Linq查询处理空值

Mut*_*lai 3 linq vb.net entity-framework

From r In ReceiptLines
Where 
r.RECEIPT.RECEIPTDATE >= _reportStartDate 
And r.RECEIPT.RECEIPTDATE <= _reportEndDate
Let amount = r.QUANTITY * r.PRICE
Let discount = r.RECEIPTDISCOUNTs.Sum(Function(d) d.DISCOUNT) 
where discount > 0
Group By Department = r.ITEMSTYLE.ITEM.CATEGORY.DEPARTMENT.DEPARTMENTNAME
Into Sales = Sum(amount - discount), 
Average = Average(amount - discount), 
Count = Count()
Run Code Online (Sandbox Code Playgroud)

我从ReceiptLine,Receipt,ReceiptDiscount表中获取所有部门及其销售额,平均数.我面临的问题是,如果我删除折扣> 0,我得到null异常.但如果我把它包括在内,那么我只能得到有折扣的销售.我如何编写使所有销售额减少折扣的查询(如果有的话).任何帮助都非常感谢.

Alb*_*nbo 8

这是LINQ2SQL常见的陷阱.

SUM如果集合中没有项目,则SQL中的函数返回null,但Enumerable.Sum()的签名返回int.当SQL查询返回null,LINQ2SQL提供程序需要整数时,这会产生运行时异常.

解决方案是将sum的结果转换为可以为null的整数,并使用GetValueOrDefault将null-case转换为0.

更换

Let discount = r.RECEIPTDISCOUNTs.Sum(Function(d) d.DISCOUNT) 
Run Code Online (Sandbox Code Playgroud)

Let discount = CType(r.RECEIPTDISCOUNTs.Sum(Function(d) d.DISCOUNT), Integer?).GetValueOrDefault(0)
Run Code Online (Sandbox Code Playgroud)