using System; using System.Collections.Generic; using System.Linq; namespace Hncore.Infrastructure.EntitiesExtension { public class CommonEqualityComparer : IEqualityComparer { private Func keySelector; private IEqualityComparer comparer; public CommonEqualityComparer(Func keySelector, IEqualityComparer comparer) { this.keySelector = keySelector; this.comparer = comparer; } public CommonEqualityComparer(Func keySelector) : this(keySelector, EqualityComparer.Default) { } public bool Equals(T x, T y) { return comparer.Equals(keySelector(x), keySelector(y)); } public int GetHashCode(T obj) { return comparer.GetHashCode(keySelector(obj)); } } /// /// 扩展类 /// public static class DistinctExtensions { public static IEnumerable Distinctx(this IEnumerable source, Func keySelector) { return source.Distinct(new CommonEqualityComparer(keySelector)); } public static IEnumerable Distinctx(this IEnumerable source, Func keySelector, IEqualityComparer comparer) { return source.Distinct(new CommonEqualityComparer(keySelector, comparer)); } } }