Sto usando LINQ su un IQueryable restituito da NHibernate e devo selezionare la riga con il valore massimo (i) in un paio di campi.
Ho semplificato la parte su cui sto attaccando. Devo selezionare l'unica riga dalla mia tabella con il valore massimo in un campo.
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
Questo non è corretto ma non riesco a trovare il modulo giusto.
A proposito, quello che sto effettivamente cercando di ottenere è approssimativamente questo:
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();
Ho iniziato con il lambda sopra ma ho usato LINQPad per provare a elaborare la sintassi per la selezione di Max ().
AGGIORNARE
La rimozione di GroupBy è stata la chiave.
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();