使用Linq减少嵌套循环

时间:2018-10-23 02:03:15

标签: c# linq nested-loops

我在徘徊,是否可以使用linq重写以下嵌套循环。这里的要点是,如果“ item2”列表中包含“ value”,则返回“ item2”。

foreach (var item1 in item1list)
    foreach (var item2 in item1.items2list)
        foreach (var item3 in item2.items3list)
            if (item3 == value)
                return item2;

return null;

1 个答案:

答案 0 :(得分:2)

在前两个循环中使用SelectMany,在第三个循环中使用FirstOrDefault + Any,然后加上if检查:

return item1list.SelectMany(x1 => x1.items2list)
                .FirstOrDefault(x2 => x2.items3list.Any(x3 => x3 == value));

您也可以将Any调用替换为Contains(value)

它更具可读性吗?可能不会。将3个循环放入具有描述性名称的私有方法中,对于将来以后阅读该代码的任何人可能会更好。