EF核心-外部匹配计数的计算列

时间:2018-07-06 03:08:35

标签: .net sql-server entity-framework .net-core

说我有一个这样的查询:

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 个答案:

答案 0 :(得分:2)

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

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

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