Tôi đang sử dụng LINQ trên IQueryable được trả về từ NHibernate và tôi cần chọn hàng có (các) giá trị tối đa trong một vài trường.LINQ Sử dụng Max() để chọn một hàng đơn
Tôi đã đơn giản hóa bit mà tôi đang gắn bó. Tôi cần phải chọn một hàng từ bảng của tôi với giá trị tối đa trong một trường.
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
Điều này không chính xác nhưng tôi không thể làm đúng mẫu.
BTW, những gì tôi đang thực sự cố gắng để đạt xấp xỉ này:
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();
tôi bắt đầu với lambda trên nhưng tôi đã sử dụng LINQPad để thử và làm việc ra các cú pháp để lựa chọn Max ().
CẬP NHẬT
Loại bỏ các groupby là chìa khóa.
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();
có thể trùng lặp: http://stackoverflow.com/questions/1101841/linq-how-to-perform-max-on-a-property-of-all-objects-in-a-collection-and-ret –
@ M.Babcock có một câu trả lời tốt khá xa trong câu hỏi đó: http: // stackoverflow.com/a/6330485/444244 – Boggin
Có nhiều cái tốt hơn thế ... –