J'utilise LINQ sur un IQueryable retourné par NHibernate et j'ai besoin de 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 mon tableau qui contient 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
C'est incorrect, mais je n'arrive pas à trouver la bonne forme.
BTW, ce que j'essaie 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 la lambda ci-dessus mais j'ai utilisé LINQPad pour essayer de trouver la syntaxe pour sélectionner Max().
MISE À JOUR
La suppression du GroupBy était essentielle.
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();