我有以下代码尝试在1000-10000之间找到一个可以分配给userId的新唯一值.我这样做是通过查询所有userIds的DB并找到第一个未使用的用户ID:
var users = userDbContext.Data.Select(a => a.UserId);
for (int i = 1000; i < 10000; i++)
{
if (!users.Contains(i))
{
this.Id = i;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,此循环的每次迭代都在查询数据库表,而不仅仅是查询内存中的内容.不知道怎么解决这个问题?
Luc*_*ski 10
将指针悬停在var关键字上,你会发现它仍然是一个IQueryable<int>.
您应该将其转换为集合以在内存中处理它,如下所示:
var users = userDbContext.Data.Select(a => a.UserId).ToList();
Run Code Online (Sandbox Code Playgroud)
.ToList() 将枚举查询,它将执行它.
但是你可以做的更好:因为你大多采用Contains,使用HashSet它是一个O(1)操作:
var users = new HashSet<int>(userDbContext.Data.Select(a => a.UserId));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |