在XAML中,DataGrid绑定到名为Results
的EF实体列表。其中一列绑定到Count
Buildings
导航属性。延迟加载已关闭。因此,我需要在查询中包含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。看起来这是一种气味的东西。什么是标准模式?
答案 0 :(得分:6)
如果您只需要DataModelProperty p=DataModelProperty.valueOf("ITEM_DESC");// just as example
List<DataModel> filtered = data.stream()
.filter(p.asPredicate(query))
.collect(Collectors.toList());
,那么您可以创建以下查询
Count
然后在XAML中绑定到Results = db.BAStreets.Select(i => new
{
Street = i,
StreetType = i.Street.StreetType,
District = i.Area.District,
BuildingCount = i.Buildings.Count()
}).ToList()
属性而不是另一个属性。
BuildingCount