J'utilise LINQ sur un IQueryable renvoyé par NHibernate et je dois sélectionner la ligne avec la (les) valeur (s) maximale (s) dans quelques champs.
J'ai simplifié la partie sur laquelle je m'accroche. Je dois sélectionner la ligne de ma table avec la valeur maximale dans un champ.
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
Ceci est incorrect mais je ne parviens pas à trouver le bon formulaire.
BTW, ce que j'essaie réellement de réaliser est à peu près ceci:
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();
J'ai commencé avec le lambda ci-dessus mais j'ai utilisé LINQPad pour essayer de trouver la syntaxe pour sélectionner le Max ().
METTRE À JOUR
La suppression de GroupBy était la clé.
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();