使用Max并收到错误“序列不包含任何元素”

时间:2020-02-13 16:13:06

标签: c# asp.net asp.net-mvc linq linq-to-sql

我要在表格中添加一行。列(SubjectCount)之一包含一个计数值。计数值应获得此列的最大值,并将其加1。

我添加了此代码

s.SubjectCount = GetAll().Max(t => t.SubjectCount as int?)?? 0 + 1;

但值始终为1。如果我将其更改为

s.SubjectCount = GetAll().Max(t => t.SubjectCount) + 1;

然后,如果存在现有行,则工作,但如果表/值为空,则行不通,并且出现错误“ 序列不包含任何元素 ”。

我搜索了该错误,还尝试了DefaultIfEmpty(),但这并不能解决问题(除非我的语法不正确)。

最后GetAll()当前不返回任何行(这是我认为问题所在的位置),所以我知道我可以手动添加第一行,但理想情况下,如果表为空,我希望对此问题有一个具体的解决方案?

2 个答案:

答案 0 :(得分:1)

这行吗?

s.SubjectCount = GetAll().Max(t => t.SubjectCount as int?)?? 0;
s.SubjectCount++;

如果表中有一个或多个行,则您以前的实现不加1,这就是为什么它总是返回1的原因。

答案 1 :(得分:1)

我认为最安全的方法是避免捷径:

var entities = GetAll();
s.SubjectCount = (entities?.Any() == true ? entities.Max(t => t.SubjectCount) : 0) + 1;

您还应该考虑直接在SQL中而不是在内存中执行Max操作。

相关问题