我在徘徊,是否可以使用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;
答案 0 :(得分:2)
在前两个循环中使用SelectMany
,在第三个循环中使用FirstOrDefault
+ Any
,然后加上if检查:
return item1list.SelectMany(x1 => x1.items2list)
.FirstOrDefault(x2 => x2.items3list.Any(x3 => x3 == value));
您也可以将Any
调用替换为Contains(value)
。
它更具可读性吗?可能不会。将3个循环放入具有描述性名称的私有方法中,对于将来以后阅读该代码的任何人可能会更好。