2011-01-27 39 views
0

以下查詢爲我提供了條形碼,該條形碼的版本號和應用碼。我需要查詢來過濾掉重複的條形碼,只保留條形碼的最高版本號。如何只查詢最新版本?

我一直在思考合併條碼字段和版本字段的方式,只保留最高但看起來很髒。有更清潔的解決方案嗎?

select Barcode, MAX(versionNo) vn, Appcode from Mailsort 
where Created between '01/26/2011' and '01/27/2011' 
group by Barcode, AppCode; 

這樣做的原因查詢就是獲得一個LINQ語句。這確實爲每appcode計數不管條形碼或在泰豐一刻版本。

var results = from p in dataContext.GetTable<mailsortEntity>() 
       where p.Created > datetime && p.Created < datetime.AddDays(1) 
       group p by new { p.AppCode } into g 
       select new AppCodeCountEntity 
       { 
        AppCode = g.Key.AppCode, 
        Count = g.Count() 
       }; 

有沒有比上面這個LINQ代碼更好的解決方案?

回答

1
var maxQuery = 
from rh in MailSort 
group rh by rh.BarCode into latest 
select new { BarCode = latest.Key, MaxVersion = latest.Max(l => l.Version) } 
; 

var query = 
from rh2 in MailSort 
join max in maxQuery on new {rh2.BarCode, Version = rh2.Version } 
    equals new { max.BarCode, Version = max.MaxVersion } 
select new { rh2.BarCode, rh2.Version, rh2.AppCode } 
; 

var barCodes = query.ToList(); 
+0

謝謝,它需要一些改變才能爲我的應用程序工作,但這幫助我理解了所有的邏輯。 – Andy 2011-01-27 15:40:18