Entity framework 实体框架相当于NHibernate“;“子选择取数”;

Entity framework 实体框架相当于NHibernate“;“子选择取数”;,entity-framework,Entity Framework,NHibernate有一种称为“子选择抓取”的抓取策略,详细内容如下: TLDR:当我们有这样一个实体时: class Foo { ICollection<Bar> Bars { get; set; } } var foos = DbContext.Set<Foo>().Where(x => x.Name == 'John').ToList(); var fooIds = foos.Select(x => x.Id).ToArray(); var

NHibernate有一种称为“子选择抓取”的抓取策略,详细内容如下:

TLDR:当我们有这样一个实体时:

class Foo
{
    ICollection<Bar> Bars { get; set; }
}
var foos = DbContext.Set<Foo>().Where(x => x.Name == 'John').ToList();

var fooIds = foos.Select(x => x.Id).ToArray();

var bars = DbContext.Set<Bar>().Where(x => foos.Contains(x.FooId)).ToList();
这在Foo很宽并且连接到Bar将检索大量数据的情况下非常有用


实体框架中是否有等价物?

回答我自己的问题,可以这样实现:

class Foo
{
    ICollection<Bar> Bars { get; set; }
}
var foos = DbContext.Set<Foo>().Where(x => x.Name == 'John').ToList();

var fooIds = foos.Select(x => x.Id).ToArray();

var bars = DbContext.Set<Bar>().Where(x => foos.Contains(x.FooId)).ToList();
var foos=DbContext.Set();
var fooIds=foos.Select(x=>x.Id).ToArray();
var bar=DbContext.Set().Where(x=>foos.Contains(x.FooId)).ToList();
bars变量被丢弃(Resharper会感到恼火),但是由于所有这些都发生在同一DbContext中,foo现在将填充它们的Bar集合