【问题标题】:The method Distinct is not supported不支持 Distinct 方法
【发布时间】:2012-10-29 18:01:06
【问题描述】:

我正在使用 Linq to Entities 并收到此错误

The method Distinct is not supported

在这行代码

var typeIds = _context.AttributeValues.Select(av => av.AttributeTypeId).Distinct();

这是为什么?

【问题讨论】:

  • 您使用的是 SQL Server 还是其他具有自己的 LINQ-to-Entities 提供程序的数据库?
  • 或者这是 WCF 数据服务?
  • 我正在使用 SQL Server 和 WCF 数据服务。

标签: entity-framework-4 distinct wcf-data-services


【解决方案1】:

根据 MSDN,一些使用 OData 服务的 LINQ 方法不受支持。以下是不支持的方法的部分列表。

  • 全部
  • 任何
  • 连接
  • DefaultIfEmpty
  • 不同
  • 除了
  • 相交
  • 联合
  • 邮编

有关不受支持的操作的完整列表,请参阅here

但是,作为一种解决方法,下面的语句应该适用于这种情况。

var typeIds = _context.AttributeValues
                      .Select(av => av.AttributeTypeId)
                      .AsEnumerable()
                      .Distinct();

【讨论】:

    【解决方案2】:

    一种解决方案是使用(服务器端)我的产品 AdaptiveLINQ (www.adaptivelinq.com) 提供的 QueryByCube 方法定义 WCF 数据服务。 此方法在聚合中转换投影(由选择运算符表示)

    您只需定义一个具有一维的多维数据集:AttributeTypeId

    av => av.AttributeTypeId
    

    定义一个提供可查询集合的数据服务:

    yourDbContext.AttributeValues.QueryByCube(yourCube);
    

    现在您可以使用 OData 协议查询您的服务:

    http://.../myService.svc/AttributeValues?$select=AttributeTypeId
    

    或者,如果您使用 C# 客户端:

    serviceContext.AttributeValues.Select(x => x.AttributeTypeId);
    

    相对于 A J Qarshi 提出的解决方法,此解决方案的优势在于区别在于服务器端

    【讨论】:

    • 只有在检查了您的答案后,我才批准您对问题的修改。为了将来参考,最好能提供一个有用的描述来说明为什么需要这个标签以及它为什么有意义。
    猜你喜欢
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2022-06-15
    • 2020-04-23
    • 2020-04-13
    • 2020-12-06
    • 2019-12-17
    相关资源
    最近更新 更多