【问题标题】:Select maximum version from collection with LINQ in EF在 EF 中使用 LINQ 从集合中选择最大版本
【发布时间】:2011-05-24 07:59:27
【问题描述】:
我正在努力按 TOP 版本号过滤一系列结果。以下为我提供了所有 ProductApprover 对象和不同的版本信息:
foreach (ModelLib.ProductApprover app in products)
{
if(distinct.Where(p => p.Product.ID == app.Product.ID && p.Version == app.Version).FirstOrDefault() == null)
distinct.Add(app);
}
然后我想做一个查询,只选择最高版本编号的产品。请问有人可以帮助我吗?
提前致谢。
【问题讨论】:
标签:
linq
entity-framework
entity
【解决方案1】:
每个产品的顶级版本:
var topVersions = products
.GroupBy(arg => arg.ProductId)
.Select(arg => new { ProductId = arg.Key, TopVersion = arg.Max(x => x.Version) })
.ToList();
或拥有顶级版本的产品:
var productsThatHaveTheTopVersion = products
.Where(arg => arg.Version == products.Max(arg.Version))
.ToList();
【解决方案2】:
foreach (ModelLib.ProductApprover app in products)
{
if(distinct.Where(p => p.Product.ID == app.Product.ID)
.OrderByDescending(p=>p.Version)
.FirstOrDefault( p=>p.Version == app.Version) != null)
distinct.Add(app);
}