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异常.但如果我把它包括在内,那么我只能得到有折扣的销售.我如何编写使所有销售额减少折扣的查询(如果有的话).任何帮助都非常感谢.
这是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)
| 归档时间: |
|
| 查看次数: |
4104 次 |
| 最近记录: |