使用linq简化嵌套的循环

时间:2019-06-13 13:33:26

标签: linq for-loop

我有一个包含嵌套项目的列表,我想将值/节点从Category1移到同一级别的Category2。使用double for循环执行此操作需要花费大量时间。 如何使用LINQ简化并使其快速?

foreach (var item in masterlist) {
    foreach (var item1 in item.Category1) {
        item1.Category1 = item1.Category2;
        item1.Category2 = null;
    }
}

1 个答案:

答案 0 :(得分:1)

您仍然需要使用foreach,因为Linq仅关注迭代和查询,并且应该用于引入副作用或动作(这是why Linq doesn't have a ForEach or Do extension method )。

请注意,由于item.Category1在循环内被覆盖,因此您需要首先急切地评估Linq表达式。

尝试一下(假设您的列表项类型命名为ListItem):

List<ListItem> allListItems = masterList
    .SelectMany( li => li.Category1 )
    .ToList();

foreach( ListItem item in listItems )
{
    item.Category1 = item.Category2;
    item.Category2 = null;
}