以下查询为我提供了条形码,该条形码的版本号和应用代码。我需要查询来过滤掉重复的条形码,并只保留该条形码的最高版本号。
我一直在考虑合并条形码字段和版本字段,只保留最高但看起来很脏。有更清洁的解决方案吗?
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代码更好的解决方案?
答案 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();