在创建新记录时,我要检查任何现有记录的当前最大值SortOrder
,然后将1添加到新记录。这是我的查询:
role.SortOrder = await db.Roles
.Where(b => b.Id == BranchId)
.OrderByDescending(s => s.SortOrder)
.Select(s => s.SortOrder)
.FirstOrDefaultAsync() + 1;
我想在查询中执行的操作是对所有排序在SortOrder上的现有记录进行排序,然后选择应该具有最高值的顶部记录。
但是我所有的记录都得到了SortOrder
1。
我的错误在哪里?
答案 0 :(得分:1)
我认为问题出在您的Where
子句中。您正在将BranchId
与Id
的{{1}}进行比较。可能找不到ID为Role
的角色,因此您只能从BranchId
中获得整数默认值0,该默认值将增加1。
如果您修复了FirstOrDefaultAsync()
,因此它实际上返回了结果,则可能会起作用:
Where
答案 1 :(得分:0)
您需要使用Take
:
role.SortOrder = await db.Roles
.Where(b => b.Id == BranchId)
.OrderByDescending(s => s.SortOrder)
.Select(s => s.SortOrder)
.Take(1)
.FirstOrDefaultAsync() + 1;