簡體   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