Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/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
Vb.net Linq查询处理空值 来自r的接收行 哪里 r、 RECEIPT.RECEIPTDATE>=\u reportStartDate 和r.RECEIPT.RECEIPTDATE 0 按部门分组=r.ITEMSTYLE.ITEM.CATEGORY.Department.DEPARTMENTNAME 销售总额=总额(金额-折扣), 平均值=平均值(金额-折扣), 计数=计数()_Vb.net_Linq_Entity Framework - Fatal编程技术网

Vb.net Linq查询处理空值 来自r的接收行 哪里 r、 RECEIPT.RECEIPTDATE>=\u reportStartDate 和r.RECEIPT.RECEIPTDATE 0 按部门分组=r.ITEMSTYLE.ITEM.CATEGORY.Department.DEPARTMENTNAME 销售总额=总额(金额-折扣), 平均值=平均值(金额-折扣), 计数=计数()

Vb.net Linq查询处理空值 来自r的接收行 哪里 r、 RECEIPT.RECEIPTDATE>=\u reportStartDate 和r.RECEIPT.RECEIPTDATE 0 按部门分组=r.ITEMSTYLE.ITEM.CATEGORY.Department.DEPARTMENTNAME 销售总额=总额(金额-折扣), 平均值=平均值(金额-折扣), 计数=计数(),vb.net,linq,entity-framework,Vb.net,Linq,Entity Framework,我从收据行、收据、收据折扣表中获取所有部门及其销售、平均值、计数。我面临的问题是,如果我删除折扣>0的位置,我将得到空异常。但如果我把它包括在内,那么我只能得到有折扣的销售额。 我将如何编写查询,使所有的销售折扣(如果有)。非常感谢您的帮助。您是否尝试过: From r In ReceiptLines Where r.RECEIPT.RECEIPTDATE >= _reportStartDate And r.RECEIPT.RECEIPTDATE <= _reportEndDat

我从收据行、收据、收据折扣表中获取所有部门及其销售、平均值、计数。我面临的问题是,如果我删除折扣>0的位置,我将得到空异常。但如果我把它包括在内,那么我只能得到有折扣的销售额。 我将如何编写查询,使所有的销售折扣(如果有)。非常感谢您的帮助。

您是否尝试过:

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()

这是LINQ2SQL常见的陷阱

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

解决方案是将求和的结果强制转换为可为null的整数,并使用GetValueOrDefault将null大小写转换为0

替换

...
Let amount = r.QUANTITY * r.PRICE
Let nDiscount = r.RECEIPTDISCOUNTs.Sum(Function(d) d.DISCOUNT) 
Let discount = IIf(nDiscount == Nothing, 0, nDiscount)
Group By Department = r.ITEMSTYLE.ITEM.CATEGORY.DEPARTMENT.DEPARTMENTNAME
...


我认为Muthu的代码看起来像VB.NET,三元运算符在VB.NET.Yep中发音为
IF(Condition,TrueValue,falsValue)
!很长一段时间以来,我习惯了用c语言编写代码。我没注意到。谢谢。还有
null
在VB.NET中拼写为
Nothing
。当你习惯了c#时,编写VB.NET就像在键盘上倒了两杯咖啡。你只是像往常一样打字,但到处都是红色的曲线。看起来你的代码是VB.NET。我添加了标签,如果这是错误的,你可以纠正它。
Let discount = r.RECEIPTDISCOUNTs.Sum(Function(d) d.DISCOUNT) 
Let discount = CType(r.RECEIPTDISCOUNTs.Sum(Function(d) d.DISCOUNT), Integer?).GetValueOrDefault(0)