我正在做一个自定义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);
答案 0 :(得分:2)
不支持该版本的Contains
方法。您可以在此处查看完整列表:
因此,您需要在内存中执行此操作,您可以使用AsEnumerable
。
但在这种情况下,你似乎不需要那种相等比较器。您可以使用以下查询来获得相同的结果:
table.FirstOrDefault(x => x.Content == info.Content) != null;