LINQ Subselect in Tabelle mit zusammengesetzten Schlüssel

Ich habe eine Einstellungstabelle in einer database, auf die über Entity Framework-Abfragen zugegriffen wird. Die Einstellungen haben einen zusammengesetzten Schlüssel: Kategorie, Gruppe, Name, Ziel, Geändert. Die Einstellungen enthalten natürlich auch Nicht-Schlüsselfelder wie Wert.

Wie würde ich eine Abfrage schreiben, die mir die letzte Einstellung (Kategorie, Gruppe, Name, Ziel) gibt?

Genauer gesagt, ich möchte alle aktuellen Einstellungselemente, einschließlich der Nicht-Schlüsselfelder, die einer bestimmten Kategorie, Gruppe, Zielkombination entsprechen.

Zum Beispiel: Geben Sie alle aktuellen Einstellungen für alle Ziele an, bei denen Kategorie "database" und Gruppe "Timeout" ist.

Dies könnte in zwei Schritten geschehen, wobei eine erste Abfrage alle [Kategorie-, Gruppen-, Namen-, Ziel-, Änderungs] -buttonn zurückgibt, die den Kriterien entsprechen, und dann eine loop, die eine Einstellung für jeden Schlüssel abfragt, die jedoch viele databaseabfragen erzeugen würde. Overhead schaffen.

Wie würde ich dies mit LINQ tun, wenn ich die Anzahl der vom Framework ausgeführten SQL-databaseabfragen minimieren möchte?

Solutions Collecting From Web of "LINQ Subselect in Tabelle mit zusammengesetzten Schlüssel"

var query = from s in db.Settings group s by new { s.Category, s.Group, s.Name, s.Target, } into sg select new { Setting = sg.OrderByDescending(r => r.Modified).FirstOrDefault() }; 

Bearbeiten – Wenn Sie eine list mit Einstellungen zurückgeben möchten

  List<Setting> list = (from s in db.Settings group s by new { s.Category, s.Group, s.Name, s.Target, } into sg select sg.OrderByDescending(r => r.Modified).FirstOrDefault() ).ToList(); 

Versuchen Sie die folgende LINQ-statement zu verwenden.

  List<Settings> latestSettings = db.Settings.OrderByDescending(x => x.Modified).GroupBy(x => new {x.Category, x.Group, x.Name, x.Target}, x => x) .Select(result => result.FirstOrDefault()) .ToList();