我正在使用 Linq to Entities 并收到此错误
The method Distinct is not supported
在这行代码上
var typeIds = _context.AttributeValues.Select(av => av.AttributeTypeId).Distinct();
为什么是这样?
我正在使用 Linq to Entities 并收到此错误
The method Distinct is not supported
在这行代码上
var typeIds = _context.AttributeValues.Select(av => av.AttributeTypeId).Distinct();
为什么是这样?
根据 MSDN,一些使用 OData 服务的 LINQ 方法不受支持。以下是不支持的方法的部分列表。
有关不受支持的操作的完整列表,请参见此处
但是,作为一种解决方法,下面的语句应该在这种情况下起作用。
var typeIds = _context.AttributeValues
.Select(av => av.AttributeTypeId)
.AsEnumerable()
.Distinct();
一种解决方案是使用(服务器端)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 建议的解决方法,此解决方案的优势在于在服务器端进行了区分。