Я пытаюсь хранить сообщения, которые я получаю, в базе данных с помощью NHibernate. Однако существует вероятность того, что одно и то же сообщение будет получено дважды, и в этом случае я не хочу сохранять дубликат в базе данных. Первой моей мыслью было сделать следующее:
// 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). Равенство зависит от нескольких свойств (отметка времени, несколько строк и т. д.).