使用 Max 并收到错误 'sequence contains no elements'

Using Max and receive error 'sequence contains no elements'

我正在向 table 添加一行。其中一列 (SubjectCount) 包含一个计数值。计数值应该取该列的最大值加1。

我添加了这段代码

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

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

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

然后如果存在现有行它会工作但如果 table/value 为空则不会我收到错误消息“序列不包含任何元素".

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

最后 GetAll() 目前 returns 没有行(我认为这是问题所在)所以我知道我可以手动添加第一行但理想情况下我想要一个具体的解决方案如果 table 为空,会有问题吗?

这个有用吗?

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

如果 table 中有一行或多行,您之前的实现不会加 1,这就是为什么它总是 returns 的原因。

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

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

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