【问题标题】:IEqualityComparer Exception with Linq (NotSupportedException)带有 Linq 的 IEqualityComparer 异常 (NotSupportedException)
【发布时间】:2014-08-27 10:42:50
【问题描述】:

我正在做一个自定义比较器来比较 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);

【问题讨论】:

  • 您使用的是 Linq-To-Sql 还是 Linq-To-Entities?
  • 我正在使用 Linq-To-Sql

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


【解决方案1】:

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

所以你需要在内存中执行这个操作,你可以使用AsEnumerable

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

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

【讨论】:

  • 不清楚他使用的是什么 LINQ 提供程序。但是 afaik 也 Linq-To-SQL 不支持它。
  • 这是我现在使用的方法。我只是想知道为什么其他方式不起作用。感谢您确认它不受支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
相关资源
最近更新 更多