繁体   English   中英

实体框架忽略OrderByDescending

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM