Мне нужно выяснить, имеют ли две коллекции какое-либо пересечение, как я это сделал, используя LINQ "Join", чтобы получить пересечение двух коллекций, а затем я использую "Any". Но мне интересно, есть ли еще более "элегантный" способ сделать это?
Любое пересечение в двух коллекциях
Ответ 1
Enumerable.Intersect
- это, вероятно, то, что вы ищете.
Из MSDN:
int[] id1 = { 44, 26, 92, 30, 71, 38 };
int[] id2 = { 39, 59, 83, 47, 26, 4, 30 };
IEnumerable<int> both = id1.Intersect(id2);
if(both.Any())...
Ответ 2
bool intersects = collection1.Intersect(collection2).Any();
Это предполагает "подходящую" реализацию равенства и hashcode для членов вашей коллекции (например, пример для примитивов), в противном случае вы можете передать пользовательский IEqualityComparer
.
Ответ 3
Вот метод расширения, который мы используем:
public static bool IntersectAny<T>(this IEnumerable<T> first, IEnumerable<T> second, IEqualityComparer<T> comparer = null) {
return first.Intersect(second, comparer).Any();
}
Ответ 4
Пожалуйста, посмотрите http://msdn.microsoft.com/en-us/library/system.linq.enumerable.aspx и более подробно я нашел http://www.codeproject.com/Articles/383749/How-does-it-work-in-Csharp-Part-3-Csharp-Linq-in-d будет очень полезно.