2017-02-09 58 views
1

我對實體框架和LINQ很不熟悉。我有一個單獨的實體設置了一些列,我想過濾我們的一些特殊行。 其中4行命名爲Guid(字符串),Year(短),Month(短)和FileIndex(短)。我想要獲取Guid-Year-Month的每個現有組合中具有最大FileIndex的所有行。如何簡化LINQ查詢來過濾掉一些特殊的行

我目前的解決辦法是這樣的:

var maxFileIndexRecords = from item in context.Udps 
      group item by new { item.Guid, item.Year, item.Month } 
      into gcs 
      select new { gcs.Key.Guid, gcs.Key.Year, gcs.Key.Month, 
      gcs.OrderByDescending(x => x.FileIndex).FirstOrDefault().FileIndex }; 

var result = from item in context.Udps 
     join j in maxFileIndexRecords on 
     new 
     { 
      item.Guid, 
      item.Year, 
      item.Month, 
      item.FileIndex 
      } 
      equals 
      new 
      { 
       j.Guid, 
       j.Year, 
       j.Month, 
       j.FileIndex 
      } 
      select item; 

我覺得應該有更多的表現更短的解決方案。有人給我提示嗎? 謝謝

+0

理論上我相信你應該能夠做一個嵌套查詢,你可以選擇嵌套查詢的最大值。嵌套查詢就是你的分組。 – smoksnes

回答

0

您近距離了。實際上沒有必要選擇分組鍵。你可以簡單地選擇每個組的第一項:

var maxFileIndexRecords = 
     from item in context.Udps 
     group item by new { item.Guid, item.Year, item.Month } 
     into gcs 
     select gcs.OrderByDescending(x => x.FileIndex).FirstOrDefault();