我正在尝试从实体框架实体中过滤列表中的列表。
我设法让代码工作,但我不相信这是实现目标最干净的方法。
这是我到目前为止的代码:
foreach (var n1 in tier.MatchNodes)
{
n1.LenderMatchNodes = n1.LenderMatchNodes.Where(x => x.Commission == 0).ToList();
}
实际上MatchNodes包含一组LenderMatchNodes,但我想只返回佣金== 0的节点。
提前致谢。
答案 0 :(得分:0)
尝试
tier.MatchNodes.ToList().ForEach(n1=>n1.LenderMatchNodes = n1.LenderMatchNodes.Where(x => x.Commission == 0).ToList());
答案 1 :(得分:0)
尝试使用SelectMany():
var result = dataContext.Table<Tier>()
.Where(some condition to get you the tier)
.SelectMany(tier => tier.MatchNodes)
.SelectMany(node => node.LenderMatchNodes)
.Where(x => x.Commission == 0)
.ToList();
这具有能够执行单个SQL查询的额外好处。
如果您的目标是实际更新数据库中的节点列表,您仍然可以使用Include()最小化查询数量(假设您使用的是EF):
var nodes = dataContext.Table<Tier>()
.Where(some condition to get you the tier)
.SelectMany(tier => tier.MatchNodes)
.Include(node => node.LenderMatchNodes) // loads this eagerly
.ToList();
nodes.ForEach(n => n.LenderMatchNodes = n.LenderMatchNodes.Where(condition));