对数据库行重新编号效率低下



我的数据库有一个Task表,Sequence列。Sequence列指定任务的顺序。

在某些情况下,我需要更改顺序。所以我会使用这样的东西:

var tasks = (dbContext.Tasks
.Where(t => t.UserId == userId)).ToList();
for (int i = 0; i < tasks.Count; i++)
{
// Set new sequence
tasks[i].Sequence = i;
}
dbContext.SaveChanges();

这似乎效率低下,必须检索集合中每个Task的每一列。

有没有更有效的方法可以做到这一点?

注意:请不要陷入我只是在上面的代码中将Sequence设置为i的事实。实际代码将具有指示正确值的数据接收数据。但是,如果我能优化上面的代码,我就可以根据我的最终需求调整它。

您应该能够使用Select语句仅下拉要更新的列,然后根据此答案仅更新该列。

这个例子可能有效,但不幸的是我现在无法测试它:

// Query just a single column
var tasks = dbContext.Tasks
.Where(t => t.UserId == userId)
.Select(t => new Task { UserId = t.UserId, Sequence = t.Sequence })
.ToList();
// Update a single column and tell EF to track it
for(int i = 0; i < tasks.Count; i++)
{
tasks[i].Sequence = i;
dbContext.Attach(tasks[i]);
dbContext.Entry(tasks[i]).Property(t => t.Sequence).IsModified = true;
}
// Save the changes to that column
dbContext.SaveChanges();

最新更新