Saya menggunakan LINQ pada IQuerable yang dikembalikan dari NHibernate dan saya perlu memilih baris dengan nilai maksimum di beberapa bidang.
Saya telah menyederhanakan sedikit yang saya pertahankan. Saya perlu memilih satu baris dari tabel saya dengan nilai maksimum dalam satu bidang.
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
Ini tidak benar, tetapi saya tidak dapat menentukan bentuk yang benar.
BTW, apa yang sebenarnya saya coba capai adalah kira-kira ini:
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();
Saya mulai dengan lambda di atas tetapi saya telah menggunakan LINQPad untuk mencoba dan mengerjakan sintaks untuk memilih Max ().
MEMPERBARUI
Menghapus GroupBy adalah kuncinya.
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();