using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Text; namespace Dfs.WayneChina.SpsDataCourier { /// /// Taken from the link below: /// https://stackoverflow.com/questions/3189861/pass-a-lambda-expression-in-place-of-icomparer-or-iequalitycomparer-or-any-singl /// /// /// public class GenericComparer : IComparer, IEqualityComparer { private readonly Expression> _KeyExpr; private readonly Func _CompiledFunc; // Constructor public GenericComparer(Expression> getKey) { _KeyExpr = getKey; _CompiledFunc = _KeyExpr.Compile(); } public int Compare(T obj1, T obj2) { return Comparer.Default.Compare(_CompiledFunc(obj1), _CompiledFunc(obj2)); } public bool Equals(T obj1, T obj2) { return EqualityComparer.Default.Equals(_CompiledFunc(obj1), _CompiledFunc(obj2)); } public int GetHashCode(T obj) { return EqualityComparer.Default.GetHashCode(_CompiledFunc(obj)); } } }