使用linq查询列表中的列表

时间:2015-02-06 15:05:29

标签: c# linq

我试图学习linq,但在努力学习一些概念。我如何将这个双foreach循环转换为linq查询?

foreach (var l1 in list1)
{
    foreach (var l2 in list2)
    {
       if (l1 == l2)
       {
          list1.Remove(l1);
       }
    }
}

4 个答案:

答案 0 :(得分:7)

var list3 = list1.Except(list2);

LINQ不会改变列表。

答案 1 :(得分:3)

如果list1被声明为List<T>,那么您可以执行此操作:

list1.RemoveAll(list2.Contains);

您可能会发现有点难以阅读。以上基本上相当于:

list1.RemoveAll(item1 => list2.Contains(item1));

请注意,此解决方案不基于LINQ。但是,如果list2的类型没有Contains方法,那么LINQ可以帮助您使用.Contains扩展方法;在这种情况下,在代码中添加using System.Linq;指令。)

PS:请确保您已阅读并理解my above comment:LINQ的目的是查询数据,而不是修改数据。 < / p>

答案 2 :(得分:0)

有很多方法可以做到,一个例子就是使用Intersect

var inBothLists = list1.Intersect(list2);

inBothLists.ToList().ForEach(i => list1.Remove(i));

答案 3 :(得分:0)

Linq用于查询,而不是更新,但您可以查询需要删除的项目,然后将其删除:

var itemsToRemove = list1.Where(l2.Contains(l1));
foreach(var item in itemsToRemove)
{
    list1.Remove(item)
}