LINQ to Entities查询以验证所有行是否存在

时间:2017-05-22 20:56:21

标签: entity-framework linq

我需要验证给定集合中的所有行是否都存在于数据库中,并且当前用户可以访问所有行。 我想在对数据库的单个查询中执行此操作,类似于.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完成吗?

2 个答案:

答案 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());