获取导航 属性 的 Count() 而无需在 Entity Framework 中加载整个集合

Getting Count() of navigation property without loading whole collection in Entity Framework

在 XAML 中,DataGrid 绑定到名为 Results 的 EF 实体列表。其中一列绑定到 Buildings 导航 属性 的 Count。延迟加载已关闭。所以我需要在查询中包含 Buildings 以计算它。这会导致性能问题,因为整个 Buildings 实体集合加载到内存中。但我只需要 Count 个。有没有办法在不将导航 属性 加载到内存的情况下获得 Count 的导航?

  var resQuery =
                db.BAStreets
                    .Include("Street.StreetType")
                    .Include("Area.District")
                    .Include("Buildings")
                    .Where(x => true);
  Results = resQuery.ToList();

在XAML中绑定:

<DataGridTextColumn Binding="{Binding Buildings.Count}"/>

还有一点额外的问题。我使用这个:.Where(x => true) 将 DbSet 转换为 IQueryable。看起来这是一个气味的东西。什么是标准模式?

如果您只需要 Count 那么您可以创建以下查询

Results = db.BAStreets.Select(i => new
                                {
                                    Street = i,
                                    StreetType = i.Street.StreetType,
                                    District = i.Area.District,
                                    BuildingCount = i.Buildings.Count()
                                }).ToList()

然后在 XAML 中绑定到 BuildingCount 属性 而不是另一个。

<DataGrid>
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Street}"/>
        <DataGridTextColumn Binding="{Binding StreetType }"/>
        <DataGridTextColumn Binding="{Binding District }"/>
        <DataGridTextColumn Binding="{Binding BuildingCount }"/>
    </DataGrid.Columns>
</DataGrid>