У меня есть следующие блоки кода:
public bool Equals(TranslatedTextReference other)
{
if (other is null) return false;
return Translations.Equals(other.Translations);
}
public bool Equals(string other)
{
foreach(KeyValuePair<string, string> pair in Translations)
{
if (other.Equals(pair.Value, StringComparison.InvariantCultureIgnoreCase))
return true;
}
return false;
}
public static bool operator ==(TranslatedTextReference left, TranslatedTextReference right) => left.Equals(right);
public static bool operator !=(TranslatedTextReference left, TranslatedTextReference right) => left.Equals(right);
public static bool operator ==(TranslatedTextReference left, string right) => left.Equals(right);
public static bool operator !=(TranslatedTextReference left, string right) => !left.Equals(right);
, который переопределяет поведение Equlas и == в пользовательском классе с именем TranslatedTextReference.И
database.GetCollection<Element>("elements").AsQueryable()
.FirstOrDefault(element => element.TranslatedElementName == name);
, который теоретически должен запрашивать Mongo и использовать оператор overriden ==.На практике это не работает, поскольку (я предполагаю) переопределенный оператор фактически не вызывается, потому что запрос LINQ выполняется как запрос MongoDB непосредственно на сервере MongoDB.Фактически, этот другой фрагмент кода, который использует операторы равенства по умолчанию, работает отлично.
database.GetCollection<Element>("elements").AsQueryable()
.FirstOrDefault(element => element.AtomicNumber == atomicNumber);
AtomicNumber - это целое число.
Есть ли способ заставить MongoDB использовать мой пользовательский оператор?
Кроме того, я знаю, что мог бы просто использовать операторы по умолчанию и создать тот же запрос с ними, но я должен использовать == или .Equals () в моем запросе LINQ.