我有一个表Estimation,其中有一个列EstimationNo,我试图像这样获得最大EstimationNo- 但是问题是,如果同一张表由不同的用户同时保存,则为两个用户保存相同的EstimationNo。 喜欢-10,10 现在,如何处理此问题。请提供一些解决方案。 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我通过从表中选择最大ID并将其递增1来手动插入表的ID,如果表为空并且max返回null,我如何使用c#和linq做到这一点,我正在使用以下代码,但是给出错误“不能将空值分配给类型为System.Int32的成员,这是非空值类型”
var t = (from tab1 in db.questions select tab1.QuestionId1).Max();
if (t!=null)
{
qui = t + 1;
}
else
{
qui = 1;
}
这样的事情行吗?
// Assume we want to start with id 1
var maxId = db.Questions
.Max(q => q.QuestionId1)
.DefaultIfEmpty(0)
.Max();
return maxId + 1;
DefaultIfEmpty
将处理空表的情况。
数据库通常具有自动递增的id功能。 如果使用的是实体框架,则默认情况下应启用它。
绝对不是获取“新id”的首选方法(最好由数据库生成),但是在这里:
var maxId = ((from tab1 in db.questions select (int?)tab1.QuestionId1).Max() ?? 0) + 1;
或等效形式,但IMO更易于阅读:
var maxId = (db.questions.Select(x => (int?)x.QuestionId1).Max() ?? 0) + 1
最初的问题是您正在使用IEnumerable<int>
参数调用Max()
,并且由于返回值是int
且int
不能为null
,因此不允许它返回空值(引发异常) 。
我正在将Select()
返回的枚举类型转换为Nullable<int>
(或简称int?
)类型的枚举类型,因此Max()
返回一个int?
如果可枚举为空,则它可以返回null
(例如,没有选择任何行的情况),而不是引发异常。
您可能正在使用LINQ的Extension Method语法在寻找类似的内容:
var maxID = db.Questions.Any()
? db.Questions.Max(q => QuestionId1) + 1
: 1
如果数据库中有任何Questions
,请抓住最高的QuestionId1
并加1。否则返回1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.