0

我正在尝试从实体框架实体中过滤列表中的列表。

我已经设法让代码正常工作,但是我不相信这是实现目标的最干净的方式。

这是我到目前为止的代码:

        foreach (var n1 in tier.MatchNodes)
        {
            n1.LenderMatchNodes = n1.LenderMatchNodes.Where(x => x.Commission == 0).ToList();
        }

实际上 MatchNodes 包含 LenderMatchNodes 的集合,但是我只想返回佣金 == 0 的节点。

提前致谢。

4

2 回答 2

0

尝试

tier.MatchNodes.ToList().ForEach(n1=>n1.LenderMatchNodes = n1.LenderMatchNodes.Where(x => x.Commission == 0).ToList());
于 2013-06-27T20:25:39.077 回答
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));
于 2013-06-27T20:26:43.167 回答