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

时间:2013-01-29 07:46:54

标签: c# .net linq list

拥有以下内容:

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

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

由于

2 个答案:

答案 0 :(得分:7)

bool containsAtLeastOne  = x.List2.Any(li => List1.Contains(li.Id));

答案 1 :(得分:1)

替代方案:Intersect

bool containsAtLeastOne = List1.Intersect(x.List2.Select(e => e.Id)).Any()

如果您的馆藏变得越来越大,则应使用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();

这可能比LINQ方法更快。