代码之家  ›  专栏  ›  技术社区  ›  afollestad

ef core-外部匹配计数的计算列

  •  0
  • afollestad  · 技术社区  · 6 年前

    假设我有这样的问题:

    SELECT TOP (1000) 
           [Apps].Id,
           [Apps].Name,
           (SELECT COUNT(*) FROM [DbName].[dbo].[Requests] Requests WHERE [Apps].Id = [Requests].AppId) as PendingRequests
      FROM [DbName].[dbo].[Apps] Apps
    

    有没有方法不使用存储过程映射此计数列?

    我试过这样的方法,但似乎没用:

    modelBuilder.Entity<AppModel>()
        .Property(m => m.PendingRequests)
        .HasComputedColumnSql(
            "(SELECT COUNT(*) FROM [Requests] " +
            "WHERE [Apps].[Id] = [Requests].[AppId]) as PendingRequests"
        );
    

    我可以利用人口 IEnumerable 要检查的异物 Count() ,但由于明显的原因,这对于父对象列表的性能不是很好。

    有什么建议吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Thomas Koelle    6 年前

    当然,您可以在查询中进行映射:

    from row in _db.Apps select new App() {
                         Id = row.Id
                         PendingRequests = row.Requests.Count()
                         }
    

    我认为您已经正确设置了FKS,因此导航属性可以工作。