[英]Entity Framework ignoring OrderByDescending
在我的SQL Server数据库中,我具有以下层次结构
库存>数据集>资源>渲染>符合性
其中每个都是一对多的关系。 我想获取具有最新更新一致性的三个数据集的ID。 合格没有自己的日期,而是采用父格式的修改日期。 因此,我创建了以下查询:
var datasets = _inventoryRepository
.GetConformitiesIncludeAncestors()
.OrderByDescending(conformity => conformity.Rendition.Modified)
.Select(conformity => conformity.Rendition.Resource.DatasetID)
.Distinct()
.Take(3);
GetConformitiesIncludeAncestors只是返回包含的符合性,如下所示:
return _context.Conformities.Include(conformity => conformity.Rendition.Resource.Dataset.Inventory);
但是单步执行代码时显示的SQL语句没有ORDER BY
子句。
SELECT
[Limit1].[DatasetID] AS [DatasetID]
FROM ( SELECT DISTINCT TOP (3)
[Extent3].[DatasetID] AS [DatasetID]
FROM [dbo].[Conformity] AS [Extent1]
INNER JOIN [dbo].[Rendition] AS [Extent2] ON [Extent1].[RenditionID] = [Extent2].[ID]
INNER JOIN [dbo].[Resource] AS [Extent3] ON [Extent2].[ResourceID] = [Extent3].[ID]
) AS [Limit1]
为什么OrderByDescending
被忽略? 实体框架版本为6.0.1。
编辑:我有一种解决方法,可以解决问题,但通过以其他方式查询。 我仍然对为什么OrderByDescending无效没有兴趣,因此将保持打开状态。
我使用GroupBy的解决方法
var datasets = _inventoryRepository
.GetConformitiesIncludeAncestors()
.GroupBy(conformity => conformity.Rendition.Resource.DatasetID)
.OrderByDescending(group => group.Max(conformity => conformity.Rendition.Modified))
.Take(3)
.Select(group => group.Key);
如果删除Distinct,则应获得类似的结果。
var datasets = inventoryRepository
.GetConformitiesIncludeAncestors()
.OrderByDescending(comformity => comformity.Rendition.Modified)
.Select(comformity => comformity.Rendition.Resource.DatasetId)
//.Distinct()
.Take(3)
SELECT TOP (3)
[Extent3].[DatasetId] AS [DatasetId]
FROM [dbo].[Comformities] AS [Extent1]
INNER JOIN [dbo].[Renditions] AS [Extent2] ON [Extent1].[RenditionId] = [Extent2].[Id]
INNER JOIN [dbo].[Resources] AS [Extent3] ON [Extent2].[ResourceId] = [Extent3].[Id]
ORDER BY [Extent2].[Modified] DESC
但是添加Distinct后,它不能保证订购,请查看文档 。
预期的行为是它返回源中唯一项的无序序列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.