2011-01-27 38 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