如果list1中至少有一个元素在list2中?

Dry*_*ods 0 .net c# linq list

有以下内容:

public List<int> List1 { get; set; }
...
var x = GiveMeObject(); // x.List2 --> each element on list2 has an Id (int).
...
bool containsAtLeastOne = ???
Run Code Online (Sandbox Code Playgroud)

什么是最简单/最快/最短的方式(在linq中)验证list1中是否至少有1个list1元素?

谢谢

Tim*_*ter 7

bool containsAtLeastOne  = x.List2.Any(li => List1.Contains(li.Id));
Run Code Online (Sandbox Code Playgroud)


slo*_*oth 5

选择:Intersect

bool containsAtLeastOne = List1.Intersect(x.List2.Select(e => e.Id)).Any()
Run Code Online (Sandbox Code Playgroud)

如果您的集合变得很大,您应该使用Intersect代替Contains,因为Intersect它至少与 一样快Contains。根据您的收藏,Contains速度可能会很快变慢。

如果您的集合非常小(< 1000 个元素),那么这种差异可能并不重要。


如果您不介意非 LINQ 方式和更多行代码,您可以使用

var tmp = new HashSet<int>(x.List2.Select(e => e.ID));
tmp.IntersectWith(list1);
bool containsAtLeastOne = tmp.Any();
Run Code Online (Sandbox Code Playgroud)

这可能比 LINQ 方法更快。