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ị lớn nhất trong một vài trường.
Tôi đã đơn giản hóa một chút mà tôi đang bám vào. Tôi cần chọn một hàng từ bảng của mình với giá trị lớn nhất 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ể tìm ra biểu mẫu phù hợp.
BTW, những gì tôi thực sự đang cố gắng đạt được gần như thế 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 đang sử dụng LINQPad để thử và tìm ra cú pháp để chọn Max ().
CẬP NHẬT
Xóa 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();