Sto usando LINQ su un IQueryable restituito da NHibernate e devo selezionare la riga con il valore/i massimo in un paio di campi.LINQ Utilizzo Max() per selezionare una singola riga
Ho semplificato il bit su cui mi sto attaccando. Devo selezionare una 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 corretto.
BTW, quello che sto effettivamente cercando di realizzare è di circa 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 cercare di capire la sintassi per la selezione del Max ().
UPDATE
Rimozione del 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();
possibile duplicato: http://stackoverflow.com/questions/1101841/linq-how-per-forma-max-on-a-property-of-all-objects-in-a-collection-and-ret –
@ M.Babcock c'era una buona risposta abbastanza in basso in quella domanda: http: // StackOverflow.it/a/6330485/444244 – Boggin
Ne esistono di migliori ... –