请查看下表:
范围是:我必须在数据库中检查顶部 profileid ,并且必须将其增加1.如果没有数据那么它将获取 0 并且将会增加 1 。
当有数据时我得到最高值但是如果表是完全空的,我会得到例外。代码如下。
public Decimal GetTopProfileID()
{
Decimal topID = 0;
var profileID = _dbContext.tblProfile.Max(n => n.profileid);
try
{
if (profileID == null)
{
topID = 1;
}
else
{
topID = Convert.ToDecimal(profileID);
topID++;
}
}
catch (Exception)
{
throw;
}
return topID;
}
请帮我找到解决方案。准备好任何问题。 在此先感谢!!
答案 0 :(得分:2)
如果表格中没有记录,并且您尝试获取 .Max()值, 然后它会抛出一个错误,所以最好验证是否有任何记录 存在与否。
按如下方式更新您的代码。
if (_dbContext.tblProfile.Any()) {
//Verify records in tblProfile table, if there's any record exist or not
return Convert.ToDecimal(_dbContext.tblProfile.Max(n = > n.profileid)) + 1;
try {
if (profileID == null) {
topID = 1;
} else {
topID = Convert.ToDecimal(profileID);
topID++;
}
} catch (Exception) {
throw;
}
return topID;
} else { //If there's no value in table then assuming it should return 1.
return 1;
}
<强>更新强>
或者你可以让它更简单:
if (_dbContext.tblProfile.Any()) {
//Verify records in tblProfile table, if there's any record exist or not
return Convert.ToDecimal(_dbContext.tblProfile.Max(n = > n.profileid)) + 1;
} else { //If there's no value in table then assuming it should return 1.
return 1;
}
答案 1 :(得分:0)
您可以使用此代码:
if (_dbContext.tblProfile.Any())
{
//Verify records in tblProfile table, if there's any record exist or not
var profileID = _dbContext.tblProfile.Max(n = > n.profileid) ?? 0;
return profileID + 1;
}
else
return 1;
如果ProfileID不可为空,则不需要关心空值。
然后您可以使用以下代码:
return _dbContext.tblProfile.Any() ? _dbContext.tblProfile.Max(n = > n.profileid) + 1 : 1;
答案 2 :(得分:0)
var profileID = _dbContext.tblProfile.OrderByDescending(n => n.profileid).FirstOrDefault();
Decimal topID = 1;
if (profileID != null)
{
decimal.TryParse(profileID.ProfileId, out topID);
topID++;
}
return topID;
}
Moksh Shah的回答是正确的,但在这种情况下,我们两次击中数据库, 我认为这应该产生预期的结果。
答案 3 :(得分:0)
像这样使用LastOrDefault()
:
decimal variableName = Convert.ToDecimal(_dbContext.tblProfile.Select(x=> x.ProfileId).LastOrDefault() + 1);
应该有效。
这比其他解决方案更好,因为只有一个数据库调用。