如何使用Any()而不是RemoveAll()来排除列表项?

mr_*_*ond 1 c# linq list any removeall

ListWithAllItems 包含两种类型的项目:我想要选择的项目和我不选择的项目.

listForExcluding 包含我应该排除的项目:

List<string> listForExcluding = ...;
Run Code Online (Sandbox Code Playgroud)

所以我用两个字符串来做:

List<string> x = ListWithAllItems.ToList();

x.RemoveAll(p => listForExcluding.Any(itemForExclude => itemForExclude == p));
Run Code Online (Sandbox Code Playgroud)

如何使用Any()而不是RemoveAll()用一行获取此查询?

Bra*_*NET 8

Any这里没有意义,只需使用Except:

var filtered = ListWithAllItems.Except(listForExcluding);
Run Code Online (Sandbox Code Playgroud)

ToList 如果你最后需要一个列表,否则不会无缘无故地实现IEnumerables(导致额外的枚举).

如果您RemoveAll因某种原因确实需要该版本,请使用Contains(这也是如何使用Where):

x.RemoveAll(p => listForExcluding.Contains(p));
Run Code Online (Sandbox Code Playgroud)

还有其他一些有效的线路......但是真的只需要去 Except