1

具有以下内容:

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

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

谢谢

4

2 回答 2

8
bool containsAtLeastOne  = x.List2.Any(li => List1.Contains(li.Id));
于 2013-01-29T07:48:27.153 回答
4

选择: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 方法更快。

于 2013-01-29T07:54:33.607 回答