You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Useful when you have one sequence, and you want to get the except/intersect
from another sequence based on a specific projection (like DistinctBy)
Originally sourced from here:
http://akshayluther.com/2009/08/14/improving-linq-except-and-intersect/
Additional overloads added where the two sequences have different types added -
since the Func doesn't really care if they're the same or not and therefore you
can just check equality inside.
Sample usage:
var toRemove = existingResults.Except(newResults, (x, y) => x.EntityId ==
y.EntityId && x.EntityType == y.EntityType);
Code:
public static IEnumerable<TSource> Except<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second, Func<TSource, TSource, bool> comparer)
{
return first.Where(x => second.Count(y => comparer(x, y)) == 0);
}
public static IEnumerable<TSource> Intersect<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second, Func<TSource, TSource, bool> comparer)
{
return first.Where(x => second.Count(y => comparer(x, y)) == 1);
}
public static IEnumerable<TFirstSource> Except<TFirstSource, TSecondSource>(this IEnumerable<TFirstSource> first, IEnumerable<TSecondSource> second, Func<TFirstSource, TSecondSource, bool> comparer)
{
return first.Where(x => second.Count(y => comparer(x, y)) == 0);
}
public static IEnumerable<TFirstSource> Intersect<TFirstSource, TSecondSource>(this IEnumerable<TFirstSource> first, IEnumerable<TSecondSource> second, Func<TFirstSource, TSecondSource, bool> comparer)
{
return first.Where(x => second.Count(y => comparer(x, y)) == 1);
}
Original issue reported on code.google.com by agr...@gmail.com on 9 Jul 2013 at 10:34
The text was updated successfully, but these errors were encountered:
This issue has been migrated to:
https://github.com/MoreLINQ/morelinq/issues/80
The conversation continues there.
DO NOT post any further comments to the issue tracker on Google Code as it is
shutting down.
You can also just subscribe to the issue on GitHub to receive notifications of
any further development.
Original comment by azizatif on 21 Aug 2015 at 6:55
Original issue reported on code.google.com by
agr...@gmail.com
on 9 Jul 2013 at 10:34The text was updated successfully, but these errors were encountered: