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));
}
}
}