从集合中删除所有条目,这些条目使用 linq 在不同的集合中找到

Gre*_*tel 1 c# linq collections

假设我们有两个列表:

List<string> listA = new List<string>{"a", "c"};
List<string> listB = new List<string>{"a", "a", "b", "c", "d"};
Run Code Online (Sandbox Code Playgroud)

我们想从 listB 中删除 listA 中的所有重复项。

listA 应该保持不变

listB 应该留下元素 {"b", "d"}

一个明显的解决方案是使用循环进行迭代,但我想知道如何使用 System.Linq one-liner 完成此操作?

也许像...

listB.RemoveAll(x => x.Equals(??));
Run Code Online (Sandbox Code Playgroud)

或者...

listA.ForEach(key => listB.RemoveAll(x => x.Equals(key))); // cannot convert string[] to void
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 5

您可以使用Except

listB = listB.Except(listA).ToList();
Run Code Online (Sandbox Code Playgroud)

效率较低的 LINQ 版本:

listB = listB.Where(b => !listA.Contains(b)).ToList();
Run Code Online (Sandbox Code Playgroud)

不需要创建新列表的非 LINQ 版本:

listB.RemoveAll(listA.Contains);
Run Code Online (Sandbox Code Playgroud)