gpt4 book ai didi

c# - 没有返回记录时的 EF Linq 产品总和

转载 作者:太空狗 更新时间:2023-10-29 18:20:26 25 4
gpt4 key购买 nike

我到处都看到这个问题的变体,但没有一个答案对我有用。他们中的大多数也只是试图对单个列求和——没有比下面的乘积求和更复杂的了:

public double Total

{
get
{
return _Context.Sales.Where(t => t.Quantity > 0)
.DefaultIfEmpty()
.Sum(t => t.Quantity * t.Price);
}
}

如果没有返回任何行,我想返回零。但是,如果没有返回任何行,则 .Sum() 将失败。尝试插入 Convert.ToDouble 和使用空合并运算符有多种选择,但它们仍然给我错误。

我确定我错过了一个简单的方法来做到这一点——在用头撞谷歌砖墙太长时间后,任何帮助都非常感谢!

最佳答案

删除 DefaultIfEmpty() 运算符。将 Sum 结果转换为可为 null 的类型。如果查询返回 null

,则使用空合并运算符返回默认值
public double Total    
{
get
{
return _Context.Sales
.Where(t => t.Quantity > 0)
.Sum(t => (double?)(t.Quantity * t.Price)) ?? 0;
}
}

生成的 SQL 看起来像:

SELECT SUM([Filter1].[A1]) FROM 
(SELECT CAST(CAST([Extent1].[Quantity] AS decimal(19,0)) *
[Extent1].[Price] AS float) AS [A1]
FROM [dbo].[Sales] AS [Extent1]
WHERE [Extent1].[Quantity] > 0) AS Filter1

关于c# - 没有返回记录时的 EF Linq 产品总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13550014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com