我在NHibernate返回的IQueryable上使用LINQ,我需要在几个字段中选择具有最大值的行。
我简化了我坚持的内容。我需要从我的表中选择一行,并在一个字段中取最大值。
var table = new Table { new Row(id: 1, status: 10), new Row(id: 2, status: 20) }
from u in table
group u by 1 into g
where u.Status == g.Max(u => u.Status)
select u
这是不正确的,但我无法制定正确的表格。
顺便说一句,我实际上想实现的目标大致是:
var clientAddress = this.repository.GetAll()
.GroupBy(a => a)
.SelectMany(
g =>
g.Where(
a =>
a.Reference == clientReference &&
a.Status == ClientStatus.Live &&
a.AddressReference == g.Max(x => x.AddressReference) &&
a.StartDate == g.Max(x => x.StartDate)))
.SingleOrDefault();
我从上面的lambda开始,但是我一直在使用LINQPad尝试找出选择Max()的语法。
更新
删除GroupBy是关键。
var all = this.repository.GetAll();
var address = all
.Where(
a =>
a.Reference == clientReference &&
a.Status == ClientStatus.Live &&
a.StartDate == all.Max(x => x.StartDate) &&
a.AddressReference == all.Max(x => x.AddressReference))
.SingleOrDefault();
可能重复:stackoverflow.com/questions/1101841/...
—
M.Babcock
@ M.Babcock在这个问题上有一个很好的答案:stackoverflow.com/a/6330485/444244
—
Boggin 2012年
有比这更好的了……
—
M.Babcock