Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Max和receive error';序列不包含任何元素';_C#_Asp.net_Asp.net Mvc_Linq_Linq To Sql - Fatal编程技术网

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,这只是一种情况。我刚刚看到了你的答案,我会试一试,但我尝试的第一个答案就成功了。