linq之如何使用 Linq 获取一对多关系中的事件行
我正在使用 EF4.3。在后端我有一个包含下表的数据库
在我的站点逻辑中,我检索实体层,但也预先加载 MatchNode、MatchBuyer 和 Buyer。
这是我获取所有 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 是一个 Buyer。
然而我想做的是这个。仅包含 MatchNode 的 where enabled = true 和 Buyer: Status = 'Active'。
这是否可能,是否可以将其作为 .Where() 合并到下面的逻辑中?
请您参考如下方法:
你可以试试这个:
return r.Find()
.Include("MatchNodes.MatchBuyer.Buyer")
.Where(c => c.MatchNodes
.Any(c => c.Enabled == true &&
c.MatchBuyer.Buyer.Status == "Active")
)
.ToList();
它将为您提供所有具有 MatchNodes.Enabled == true
的 Tier
和 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
好的 - 所以上面的代码将找到具有至少一个 MatchNode
的项目(Tiers
),其中 matchnode 已启用且 buyerstatus 为 actice。
我们可以通过将 .Any(..)
替换为 .All(..)
来更改它。
这将返回所有 Tiers
,其中 all MatchNodes
满足要求。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。