我有一个SQL查询,它产生我想要的输出。但我很难适应LINQ查询。
我的普通SQL查询如下所示:
SELECT ORDNO,CURR,SUM(AMOUNT) as SUMMEDAMT
FROM YTDTRNS
GROUP BY ORDNO,CURR
我为LINQ查询编写了一个这样的类:
public class SpecialClass
{
public string ORDNO { get; set; }
public string CURR { get; set; }
public double SUMMEDAMT { get; set; }
}
对于我的LINQ查询,到目前为止我能够做到这一点:
var result = db.YTDTRNS.GroupBy(y => new
{
y.ORDNO,
y.CURR
}
).Select(z => new SpecialClass
{
ORDNO = z.Key.ORDNO,
CURR = z.Key.CURR
}
);
我尝试使用SUM函数编写LINQ查询,如下所示:
var result = db.YTDTRNS.GroupBy(y => new
{
y.ORDNO,
y.CURR
}
).Select(z => new SpecialClass
{
ORDNO = z.Key.ORDNO,
CURR = z.Key.CURR,
SUMMEDAMT = z.Sum(a => a.AMOUNT)
}
);
以上似乎不正确。当我为之前编写的函数发出AJAX请求时,我得到了正确的结果集。
一旦我在该函数中包含“SUM”,当我向该函数发出AJAX请求时,我收到了内部服务器错误。
这是显示ajax error()函数的错误消息:
“ExceptionMessage”:“转换为值类型'System.Double'失败,因为具体化值为null。结果类型的泛型参数或查询必须使用可空类型。”, “ExceptionType”: “System.InvalidOperationException”
答案 0 :(得分:1)
行,
阅读更新后,我想您可能正在使用LINQ to Entities,它不支持Sum(expression)
你可以试试这个:
SUMMEDAMT = z.Select(a => a.AMOUNT).Sum()
但是我仍然建议你将代码包装在try / catch中并返回异常,这样它将返回更清晰的消息,而不是内部服务器错误
修改强> 你的类应该和你的db一样,所以你应该这样声明:
public double? SUMMEDAMT { get; set; }
答案 1 :(得分:-1)
您可以参考下面的代码,在linq查询中使用sum。


示例:


让我们玩家。每个玩家都属于一个团队,并有一个分数。球队总得分是球队中所有球员得分的总和。


 var players = new List< Player> {
新玩家{Name =“Alex”,Team =“A”,得分= 10},
新玩家{Name =“Anna”,Team =“A”,得分= 20},
新玩家{Name =“Luke”,Team =“L”,得分= 60},
新玩家{Name =“Lucy”,Team =“L”,得分= 40},
};

 var teamTotalScores =
来自玩家和#xA;由球员组成队员。团队成员为球员组
选择新的
 {
 Team = playerGroup.Key,
 TotalScore = playerGroup.Sum(x => x.Score),
 };
 代码>