我要在表格中添加一行。列(SubjectCount
)之一包含一个计数值。计数值应获得此列的最大值,并将其加1。
我添加了此代码
s.SubjectCount = GetAll().Max(t => t.SubjectCount as int?)?? 0 + 1;
但值始终为1。如果我将其更改为
s.SubjectCount = GetAll().Max(t => t.SubjectCount) + 1;
然后,如果存在现有行,则工作,但如果表/值为空,则行不通,并且出现错误“ 序列不包含任何元素 ”。
我搜索了该错误,还尝试了DefaultIfEmpty()
,但这并不能解决问题(除非我的语法不正确)。
最后GetAll()
当前不返回任何行(这是我认为问题所在的位置),所以我知道我可以手动添加第一行,但理想情况下,如果表为空,我希望对此问题有一个具体的解决方案?
答案 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操作。