我需要验证给定集合中的所有行是否都存在于数据库中,并且当前用户可以访问所有行。 我想在对数据库的单个查询中执行此操作,类似于.All()
查询,但我无法提出正确的语法(可能是& #39;不可能)。
代码的迭代版本如下:
bool canAccess;
foreach(var taskId in taskIds)
{
canAccess = await DataContext.WorkTasks.AnyAsync(wt => wt.DealerId == dealerId && wt.Id == taskId);
if(!canAccess) break;
}
我在考虑类似的事情:
var canAccess = await DataContext.WorkTasks.AllAsync(wt => wt.DealerId == dealerId && taskIds.Contains(wt.Id));
但我不认为这就是我想要的。可以使用LINQ完成吗?
答案 0 :(得分:2)
这样的事情:
var dbCount = await DataContext.WorkTasks.Where(wt => wt.DealerId == dealerId && taskIds.Contains(wt.Id)).Count();
将所有ID发送到服务器并计算匹配的行。
答案 1 :(得分:1)
要合并为一个查询:
var q = DataContext.WorkTasks.Take(0); // setup q to right type
foreach (var taskId in taskIds)
q = q.Concat(DataContext.WorkTasks.Where(wt => wt.Id == taskId && wt.DealerId == dealerId));
var canAccess = (taskIds.Count() == q.Count());