簡體   English   中英

OrderByDescending在嵌套的linq語句中不起作用

[英]OrderByDescending doesn't work in nested linq statement

在Linqpad中,我可以看到正確的列表。 但是在代碼中,在放入列表集合之后,order by對BeginDate不起作用。 如果我使用BeginDate和Max,它可以工作。 我不明白我哪里錯了?

            var templist =  contentRepository
                       .Get(q => (q.Status == (int)StatusEnum.Active) &&     
                           (q.CategoryId == category.GetHashCode() || q.Category.ParentId == category.GetHashCode())                   
                           && q.MinorVersion == 0
                           && q.MajorVersion > 0) 
                       .GroupBy(q => q.VersionId)
                       .OrderByDescending(q => q.Key)
                       .Select(q => new 
                       {
                           VersionId        = q.Key,
                           Id               = q.Max(x => x.Id),
                           MajorVersion     = q.Max(x => x.MajorVersion), 
                           UpdatedAt        = q.Max(x => x.UpdatedAt), 
                           //BeginDate        = q.Max(x=>x.BeginDate),
                           BeginDate        = (q.OrderByDescending(x => x.Id).Take(1).Select(x=>x.BeginDate)).First(),
                           Title = (q.OrderByDescending(x => x.Id).Take(1).Select(x => x.Title)).First(),
                           ShowOnHomePage   = (q.OrderByDescending(x => x.Id).Take(1).Select(x=>x.ShowOnHomePage)).First()
                        })
                       .OrderByDescending(x => x.BeginDate)                           
                       .Take(maxItemCount)
                       .ToList();

            List<ContentEntity> contents = new List<ContentEntity>();

        templist.ForEach(q => contents.Add(
                                         contentRepository
                                        .Get(x => x.VersionId == q.VersionId && x.MajorVersion == q.MajorVersion && x.MinorVersion == 0)
                                        .FirstOrDefault()                                        
                                        ));


        return contents.Where(q => q.ShowOnHomePage == true)
                       .OrderByDescending(q => q.MajorVersion)
                       .OrderByDescending(q => q.BeginDate)
                       .Take(maxItemCount)
                       .ToList();

您按Id訂購,而不是由BeginDate訂購。 等效代碼

q.Max(x => x.BeginDate)

將會

q.OrderByDescending(x => x.BeginDate).Take(1).Select(x => x.BeginDate).First()

或簡化

q.OrderByDescending(x => x.BeginDate).First().BeginDate

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM