chr*_*isn 3 entity-framework ef-code-first entity-framework-4.3
我想知道查询多对多关系的最佳方法,而无需先将所有关系对象加载到内存中.
例如,Category和Article有很多关系.这意味着我的Category类具有(延迟加载的)导航属性,如下所示:
class Category
{
public long Id {get; set;}
public ICollection<Articles> Articles {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
如果我只想选择可见的文章,我可以像这样查询导航属性:
category.Articles.Where(a => a.IsVisible)
Run Code Online (Sandbox Code Playgroud)
但据我所知,这将在执行IsVisible检查之前将所有相关文章加载到内存中.
是否可以查询相关文章而不将其加载到内存中,即作用于IQueryable而不是ICollection?如果这是一对多关系,那么我可以直接查询文章DbSet以实现我所追求的但是多对多的关系存储在sql的链接表中,这意味着我无法使用DbSet查询它.我是唯一一个手动编写原始sql来查询链接表的选项吗?
这是一种方式:
var visibleArticlesQuery = context.Category.Where(c => c.Id == category.Id)
.SelectMany(c => c.Articles)
.Where(a => a.IsVisible);
Run Code Online (Sandbox Code Playgroud)
例如,也可以使用查询文章DbSet Contains.
| 归档时间: |
|
| 查看次数: |
1252 次 |
| 最近记录: |