受信したメッセージを NHibernate を使用してデータベースに保存しようとしています。ただし、同じメッセージが 2 回受信される可能性があり、その場合、重複をデータベースに保存したくありません。私が最初に考えたのは、次のことを行うことでした。
// in SaveRange(IEnumerable<Message> messages
var alreadyStoredMessages = session.Query<Message>().Intersect(messages);
var newMessages = messages.Except(alreadyStoredMessages);
ただし、NHibernate は Intersect をサポートしていないようで、例外が発生します。いつでもすべてのメッセージをフェッチし、それらをリストまたは配列に変換してから交差を実行できることはわかっていますが、あまり効果的ではありません。
Message クラスは IEquatable を実装し、GetHashCode() と Equals(object obj) もオーバーライドします。等価性は、いくつかのプロパティ (タイムスタンプ、いくつかの文字列など) に依存します。