2016-09-07 125 views
0

我有以下實體在我DbContext意外導致的LINQ to Entities查詢

enter image description here

我寫了下面的LINQ到LINQPad Entities查詢發現,一個order通行證(一種order通過一些各個領域地區生產的,一個地區可能重複):

OrderItems.Include("NominalRoutings.OperationCatalog.WorkCenter.AreaSpecification") 
      .Where(x=>x.Id == 799730) 
      .Select(r=>r.NominalRoutings.Where(t => t.OperationCatalog.IsActive) 
             .Select(t=>new 
                { 
                AreaTitle=t.OperationCatalog.WorkCenter.AreaSpecification.Title, 
                t.ItemSequence 
                }) 
             .OrderBy(t => t.ItemSequence) 
           .Select(g => new{g.ItemSequence,g.AreaTitle}) 
          ).FirstOrDefault() 

這是它的結果:

enter image description here

現在,我想找到我的Order過去了,所以我上面的查詢改爲方面:

OrderItems.Include("NominalRoutings.OperationCatalog.WorkCenter.AreaSpecification") 
      .Where(x=>x.Id == 799730) 
      .Select(r=>r.NominalRoutings.Where(t => t.OperationCatalog.IsActive) 
             .Select(t=>new 
                { 
                AreaTitle=t.OperationCatalog.WorkCenter.AreaSpecification.Title, 
                t.ItemSequence 
                }) 
             .OrderBy(t => t.ItemSequence) 
           .GroupBy(routing => routing.AreaTitle) 
           .Select(t=>t.Key) 
          ).FirstOrDefault() 

結果是:

enter image description here

但我希望下面的結果:

  • 1熔體
  • 2 LAB
  • 3 PU09
  • 4 LSM

因爲我orderd由ItemSequence的區域,然後通過分組標題它。我錯了嗎?或者我的代碼中有任何問題?

回答

0

OrderBy返回IOrderedEnumerable顯然保持了秩序,但使用GroupBy當它不需要保留任何命令(如果它會它會返回IOrderedEnumerable太講清楚)。

我建議你做的是先GroupBy然後Order

.Select(t => new { AreaTitle = t.OperationCatalog.WorkCenter.AreaSpecification.Title, t.ItemSequence }) 
.GroupBy(routing => routing.AreaTitle) 
.OrderBy(t => t.Min(x => x.ItemSequence)) 
.Select(t=>t.Key)