当我必须关注POCO时
class Poco {
public int Id {get; set;}
public virtual ICollection<Child> Children {get; set;}
}
和孩子
class Child {
public int MyProperty {get; set;}
}
如果他们满足某些谓词,我想得到一些孩子,例如
Poco mypoco = getMyPoco();
IEnumerable<Child> someChildren = mypoco.Children
.Where( child => child.MyProperty > 30);
我注意到这首先从数据库中获取所有子项,然后对返回的列表进行过滤。如何确保条件在数据库上而不是在我的应用程序中运行?
答案 0 :(得分:2)
您可以使用Load
方法使用显式加载,但需要暂时禁用延迟加载。
var context = ...; // DbContext
context.Configuration.LazyLoadingEnabled = false;
context.Entry(mypoco)
.Collection(poco => poco.Children)
.Query()
.Where(child => child.MyProperty > 30)
.Load();
过滤器将在数据库中完成并加载到Children
。