LinQ查询没有排序

时间:2014-07-01 09:13:41

标签: c# sql linq entity-framework

我有一个奇怪的问题。下面的代码一旦执行,就不会在sql语句中使用任何形式的ORDER BY,因此它不会返回有意的记录。

var last5CommesseRisorsaPjId = db.Attivita
                    .Where(a => a.IdRisorsa == loggedUser.Id)
                    .OrderByDescending(a => a.Data)      //this looks ignored
                    .Select(a => a.FasiCommessa.Commesse.AxProjId)
                    .Distinct()
                    .Take(5)
                    .ToList();

SQL:(使用db.Database.Log):

SELECT 
[Limit1].[AxProjId] AS [AxProjId]
FROM ( SELECT DISTINCT TOP (5) 
    [Extent3].[AxProjId] AS [AxProjId]
    FROM   [dbo].[Attivita] AS [Extent1]
    LEFT OUTER JOIN [dbo].[FasiCommessa] AS [Extent2] ON [Extent1].[IdFaseCommessa] = [Extent2].[Id]
    LEFT OUTER JOIN [dbo].[Commesse] AS [Extent3] ON [Extent2].[IdCommessa] = [Extent3].[Id]
    WHERE [Extent1].[IdRisorsa] = 'ecaffee0-5aeb-45cf-8d40-218ff63a2108'
)  AS [Limit1]

我希望在ORDER BY [Extent1].[Data] DESC子句之后有一个WHERE

怎么了?

3 个答案:

答案 0 :(得分:2)

区别可能是通过在distinct()

之后调用orderBy来搞乱订单
 var last5CommesseRisorsaPjId = db.Attivita
                    .Where(a => a.IdRisorsa == loggedUser.Id)
                    .Distinct()
                    .OrderByDescending(a => a.Data)      //this looks ignored
                    .Select(a => a.FasiCommessa.Commesse.AxProjId)
                    .Take(5)
                    .ToList();

答案 1 :(得分:1)

首先调用Distinict,然后调用OrderBy

答案 2 :(得分:0)

解决了重写查询的问题,如下所示:

var last5CommesseRisorsaPjId = db.Attivita
                   .Where(a => a.IdRisorsa == loggedUser.Id)
                   .GroupBy(a => a.FasiCommessa.Commesse.AxProjId)
                   .Select(g => new { AxProjId = g.Key, MaxData = g.Max(a => a.Data) })
                   .OrderByDescending(c => c.MaxData)
                   .Select(c => c.AxProjId)
                   .Take(5)
                   .ToList();