Ich verwende LINQ für ein von NHibernate zurückgegebenes IQueryable und muss die Zeile mit den Maximalwerten in einigen Feldern auswählen.
Ich habe das Stück, an dem ich festhalte, vereinfacht. Ich muss die eine Zeile aus meiner Tabelle mit dem Maximalwert in einem Feld auswählen.
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
Das ist falsch, aber ich kann nicht das richtige Formular finden.
Übrigens versuche ich eigentlich Folgendes zu erreichen:
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();
Ich habe mit dem obigen Lambda begonnen, aber ich habe LINQPad verwendet, um die Syntax für die Auswahl von Max () zu erarbeiten.
AKTUALISIEREN
Das Entfernen des GroupBy war der Schlüssel.
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();