我正在使用EF4.3。在后端我有一个包含以下表格的数据库
在我的网站逻辑中,我检索实体层,但也急切加载MatchNode,MatchBuyer和买方。
这是我获取所有Tier实体的逻辑:
public static IEnumerable<Tier> Fetch()
{
using (var uow = new UnitOfWork(ConnectionString.Lenders))
{
var r = new Repository<Tier>(uow.Context);
return r.Find()
.Include("MatchNodes.MatchBuyer.Buyer")
.ToList();
}
}
正如您所看到的,Tier有许多MatchNode,每个MatchNode,一个MatchBuyer和MatchBuyer都是一个买家。
但我想做的就是这个。仅包括MatchNode的enabled = true和Buyer:Status ='Active'。
这是否可行,是否可以作为.Where()纳入下面的逻辑?
答案 0 :(得分:2)
你可以试试这个:
return r.Find()
.Include("MatchNodes.MatchBuyer.Buyer")
.Where(c => c.MatchNodes
.Any(c => c.Enabled == true &&
c.MatchBuyer.Buyer.Status == "Active")
)
.ToList();
它将为您提供Tier
的所有MatchNodes.Enabled == true
个
和Buyer.Status == "Active"
修改强>
仅返回MatchNotes
使用SelectMany
:
var lst = r.Find()
.Include("MatchNodes.MatchBuyer.Buyer")
.Where(c => c.MatchNodes
.Any(c => c.Enabled == true &&
c.MatchBuyer.Buyer.Status == "Active")
)
.SelectMany(c => c.MatchNodes) //<-- SelectMany istead of Select
.ToList();
编辑2
好的 - 所以上面的代码会找到至少一个 Tiers
的项目(MatchNode
),其中启用了matchnode并且appstatus是actice。
我们可以将.Any(..)
替换为.All(..)
来更改它
这将返回Tiers
所有所有 MatchNodes
满足要求的所有内容。