我对 EF (v4.1) 还是很陌生,所以如果我错了,请纠正我,但如果我有一个 InverseProperty 如下:
public virtual ICollection<ItemComment> Comments { get; set; }
这将在访问属性时延迟加载。但是,如果我希望过滤此列表 - 例如,仅获取活动评论,我可以添加另一个属性,如下所示:
public IEnumerable<ItemComment> ActiveComments {
get { return Comments.Where(x => x.IsActive); }
}
但是,这会先加载整个 Comments 集合,然后过滤,对吗?所以不使用 IQueryable?为了性能,理想情况下我想使用 IQueryable 获取列表。
所以我的问题是,这可以使用这样的实体的属性来完成吗?还是我必须直接在 ItemComments 上做一个 where:
var comments = itemCommentRepository.QueryAll()
.Where(x => x.IsActive && x.ItemId == XX).
这显然会奏效......但我想知道是否有更好的解决方案?
更新:似乎整个结果集都已加载,并且任何过滤都将在整个数据集客户端完成。除了 hack 或更改实体以传递上下文(糟糕!)之外,似乎没有内置的方法可以这样做。已将@Slauma 的回复标记为答案。