如何使用多个from子句等待LINQ查询?

时间:2018-03-29 10:45:14

标签: c# async-await sqlite-net sqlite-net-extensions

我有以下使用多个from子句的LINQ查询:

var count = (
    from uTask in db.Table<UTask>().Where(u => u.ParentId == componentId && u.RouteId == routeId)
    from workItem in db.Table<WorkItem>().Where(w => w.ParentId == uTask.Id)
    from visualInspectionQuestion in db.Table<VisualInspectionQuestion>().Where(v => v.ParentId == workItem.Id && v.Answer != null)
    select new { }).Count();

如何调整此值以等待每个from子句?我知道有很多关于如何使用等待LINQ的例子,但是我找不到如何处理多个from子句的例子。我使用SQLite-net和异步扩展。

编辑1:我按照Evk的建议尝试了以下内容:

count = await (
    from uTask in db.Table<UTask>().Where(u => u.ParentId == componentId && u.RouteId == routeId)
    from workItem in db.Table<WorkItem>().Where(w => w.ParentId == uTask.Id)
    from visualInspectionQuestion in db.Table<VisualInspectionQuestion>().Where(v => v.ParentId == workItem.Id && v.Answer != null)
    select new { }).CountAsync();

但是,这会产生以下编译器错误:

  

无法找到源类型&#39; AsyncTableQuery&#39;的查询模式的实现。 &#39;的SelectMany&#39;没找到。

1 个答案:

答案 0 :(得分:0)

尝试使用 Task.WhenAll()。在计算之前,这将等待所有任务完成:

var tasks = foos.Select(DoSomethingAsync).ToList();
var count = await Task.WhenAll(tasks).CountAsync();