2

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

The method Distinct is not supported

在这行代码上

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

为什么是这样?

4

2 回答 2

1

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

  • 全部
  • 任何
  • 康卡特
  • DefaultIfEmpty
  • 清楚的
  • 除了
  • 相交
  • 联盟
  • 压缩

有关不受支持的操作的完整列表,请参见此处

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

var typeIds = _context.AttributeValues
                      .Select(av => av.AttributeTypeId)
                      .AsEnumerable()
                      .Distinct();
于 2014-07-17T11:30:56.780 回答
0

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

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

av => av.AttributeTypeId

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

yourDbContext.AttributeValues.QueryByCube(yourCube);

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

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

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

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

相对于 AJ Qarshi 建议的解决方法,此解决方案的优势在于在服务器端进行了区分

于 2014-07-19T14:37:12.663 回答