我有一个奇怪的问题。下面的代码一旦执行,就不会在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
。
怎么了?
答案 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();