如何只查询最新版本?

时间:2011-01-27 14:24:50

标签: c# linq-to-sql

以下查询为我提供了条形码,该条形码的版本号和应用代码。我需要查询来过滤掉重复的条形码,并只保留该条形码的最高版本号。

我一直在考虑合并条形码字段和版本字段,只保留最高但看起来很脏。有更清洁的解决方案吗?

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 个答案:

答案 0 :(得分: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();