C# 使用Max和receive error';序列不包含任何元素';
我正在向我的表中添加一行。其中一列(C# 使用Max和receive error';序列不包含任何元素';,c#,asp.net,asp.net-mvc,linq,linq-to-sql,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; 然后,如果存在一个现有行,但如果表/值为空,则它不起作用。我得到错误
SubjectCount
)包含一个计数值。计数值应获取此列的最大值,并向其中添加1
我添加了这个代码
s.SubjectCount = GetAll().Max(t => t.SubjectCount as int?)?? 0 + 1;
但值始终为1。如果我把它改成
s.SubjectCount = GetAll().Max(t => t.SubjectCount) + 1;
然后,如果存在一个现有行,但如果表/值为空,则它不起作用。我得到错误“序列不包含任何元素”
我搜索了错误并尝试了DefaultIfEmpty()
,但这并没有解决问题(除非我的语法不正确)
最后,GetAll()
目前没有返回任何行(我认为这就是问题所在),因此我知道我可以手动添加第一行,但理想情况下,如果表为空,我希望有一个具体的解决方案?这行吗
s.SubjectCount = GetAll().Max(t => t.SubjectCount as int?)?? 0;
s.SubjectCount++;
如果表中有一行或多行,则以前的实现不会添加1,这就是为什么它总是返回一行 我认为最安全的方法是避免走捷径:
var entities = GetAll();
s.SubjectCount = (entities?.Any() == true ? entities.Max(t => t.SubjectCount) : 0) + 1;
您还应该考虑直接在SQL中执行马克斯操作,而不是在内存中执行。
它与作者的第一次尝试有什么不同?请参阅更新后的答案。我敢肯定,如果不在?
操作符的左侧添加1,这只是一种情况。我刚刚看到了你的答案,我会试一试,但我尝试的第一个答案就成功了。