使用Linq的IEqualityComparer异常(NotSupportedException)

时间:2014-08-27 10:42:50

标签: c# .net linq linq-to-sql

我正在做一个自定义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 个答案:

答案 0 :(得分:2)

不支持该版本的Contains方法。您可以在此处查看完整列表:

因此,您需要在内存中执行此操作,您可以使用AsEnumerable

但在这种情况下,你似乎不需要那种相等比较器。您可以使用以下查询来获得相同的结果:

table.FirstOrDefault(x => x.Content == info.Content) != null;