使用 Linq 减少嵌套循环

Reduce nested loops using Linq

我在想是否可以使用 linq 重写以下嵌套循环。这里的问题是你 return 如果 "value" 包含在 "item2".

的列表中 "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;

前 2 个循环使用 SelectMany,第三个循环使用 FirstOrDefault+Any + if 检查:

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

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

是否更具可读性?可能不会。将您的 3 个循环放在具有描述性名称的私有方法中,对于将来阅读该代码的任何人来说可能会更好。