Исключение IEqualityComparer с Linq (NotSupportedException)

1

Я делал пользовательский Comparer для сравнения двух классов в запросе Linq, подобном этому:

Table<Info> table = context.GetTable<Info>();
bool infoAlreadyExists = table.Contains(info, new MyComparer());

Это мой сравнитель:

public class MyComparer : IEqualityComparer<Info>
{

    #region IEqualityComparer<Info> Member

    public bool Equals(Info x, Info y)
    {
        return x.Content == y.Content;
    }

    public int GetHashCode(Info obj)
    {
        return obj.Content.GetHashCode();
    }

    #endregion
}

Проблема в том, что я получаю исключение. [System.NotSupportedException]

Исключение говорит мне, что была обнаружена не поддерживаемая перегрузка для оператора Contains. Я что-то делаю неправильно или действительно не поддерживается? Я ничего не мог найти в документации.

Это определение перегрузки, которую я пытаюсь использовать метод contains.

public static bool Contains<TSource>(this IQueryable<TSource> source, TSource item, IEqualityComparer<TSource> comparer);
  • 1
    Вы используете Linq-To-Sql или Linq-To-Entities?
  • 0
    Я использую Linq-To-Sql
Теги:
linq
linq-to-sql

1 ответ

2
Лучший ответ

Эта версия метода Contains не поддерживается. Вы можете увидеть полный список здесь:

Поэтому вам нужно выполнить эту операцию в памяти, вы можете использовать AsEnumerable для этого.

Но в этом случае кажется, что вам не нужен этот сравнительный коэффициент. Вы можете просто использовать следующий запрос, чтобы получить тот же результат:

table.FirstOrDefault(x => x.Content == info.Content) != null;
  • 0
    Не ясно, каким провайдером LINQ он пользуется. Но afaik также Linq-To-SQL не поддерживает.
  • 0
    Это подход, который я использую прямо сейчас. Мне просто интересно, почему другой способ не работает. Спасибо за подтверждение, что это не поддерживается.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню