Beispiel verdeutlicht Ich habe eine Datenbank von Benutzern, die von einem Skript erstellt wird, das Active Directory durchsucht. Eines der anzuwendenden Felder ist ein "ScanDate" -Feld, das anzeigt, wann der Scan stattgefunden hat. Das Skript scannt durch mehrere Active Directory-Domänen.Wie verwende ich Group By und MAX in Linq, um mehrere Zeilen zurückzugeben?
ZIEL: Beziehen Sie eine IList aus der Datenbank, die die Liste der Benutzer für ALLE Domänen enthält, wobei ScanDate jedoch der MAX (ScanDate) für jede Domäne ist.
Dies stellt sicher, dass ich die frischesten Daten für jede Domäne erhalte.
Eine SQL-Abfrage, die für mich zu arbeiten scheint:
SELECT *
FROM ADScans a
WHERE a.ScanDate = (SELECT MAX(b.ScanDate) FROM ADScans b WHERE a.Domain = b.Domain) AND Enabled = 1
jedoch Schwierigkeiten haben, dass ausgedrückt in LINQ
z.B .:
Kategorie | Datum
Cat1 4/4/16
Cat2 | 4/4/16
Cat3 | 4/4/16
Kat1 | 4/3/16
ich eine Liste erwarten:
Cat1 | 4/4/16
Kat2 | 4/4/16
Cat3 |
4/4/16Einige Klärung
Ich würde erwarten, mehrere Zeilen pro Kategorie zurückgeführt haben - die MAX (Datum) gibt mir nicht nur eine. Ich möchte alle Zeilen für den MAX (Datum) jeder Kategorie erhalten.
Ihre Frage nicht mehr klar. Wenn Sie mehrere Zeilen für jede Kategorie mit demselben Datum erhalten, sind diese Elemente Duplikate voneinander. Ist das was du willst? Bitte geben Sie ein besseres Beispiel. –