Я делал пользовательский 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);
Эта версия метода Contains
не поддерживается. Вы можете увидеть полный список здесь:
Поэтому вам нужно выполнить эту операцию в памяти, вы можете использовать AsEnumerable
для этого.
Но в этом случае кажется, что вам не нужен этот сравнительный коэффициент. Вы можете просто использовать следующий запрос, чтобы получить тот же результат:
table.FirstOrDefault(x => x.Content == info.Content) != null;
Linq-To-SQL
не поддерживает.