NHibernate не может использовать произвольный IEqualityComparer и переводить его в SQL. Например:
class PersonEqualityComparer: IEqualityComparer<Person> {
public bool Equals(Person p1, Person p2) {
var cfg = ConfigurationManager.AppSettings["something"];
if (SomeStaticClass.SomeMethod(cfg)) {
return p1.Id == p2.Id;
}
return p1.Name == p2.Name;
}
public int GetHashCode(Person p) {
return p.Id.GetHashCode();
}
}
Да, это может быть ужасной реализацией, но возможно и совершенно правильно. Как бы NHibernate перевел это на SQL? Он не может или, по крайней мере, не без посторонней помощи, поэтому вам нужно расширить поставщика NHibernate LINQ , чтобы сообщить NHibernate, как его перевести.