2016-09-03 1 views
0

Ich habe ein paar Tabellen, die durch Zuordnungen verknüpft sind. Die Tabelle Skew unterscheidet Datensätze nach dem Datum, an dem die Daten hinzugefügt wurden (Spalte "Aktualisiert"). Ich versuche, die Tabellen abzufragen, um eine Liste nur für den letzten Datensatz in Tabelle Skew, nicht alle Datensätze zu extrahieren.Liste der Datensätze abrufen, in denen nur der letzte Datensatz aus einer Tabelle ausgewählt ist

Zum Beispiel extrahiert die folgende Zeile korrekt den letzten Datensatz und den Wert A aus der Tabelle Skew.

Die Abfrage unten extrahiert alle Datensätze, nicht nur die neuesten.

Wie kann ich die zweite Abfrage so ändern, dass nur der letzte Datensatz in der Tabelle Skew zurückgegeben wird? Die Abfrage unten (und andere Varianten, die ich versucht habe) kompiliert nicht.

var ListData = DATActx.Books. 
           OrderByDescending(B => B.Option.Skews.Updated). 
           Where(B => B.DealContract != null). 
           Select(B => new clsMonteCarlo.Leg() 
           { 
            BookID = B.ID, 
            DealNo = B.DealNo, 
            DealContract = B.DealContract, 
            BookA = B.Option.Skews.BookA  // one item in Book links to many in Skews - need to only select the first record 
           }).First().ToList(); 

Danke für jede Hilfe.

Antwort

2
First().ToList(); 

Dieser Teil macht keinen Sinn. First() gibt eine Instanz Ihrer Book-Klasse zurück, in der wahrscheinlich ToList() nicht definiert ist. Entfernen Sie einfach ToList() und Sie erhalten den gewünschten Datensatz.

UPDATE

auf Ihre Antwort Basierend, möchten Sie eine geordnete groupby.

var ListData = DATActx.Books. 
           Where(B => B.DealContract != null). 
           Select(B => new clsMonteCarlo.Leg() 
           { 
            BookID = B.ID, 
            DealNo = B.DealNo, 
            DealContract = B.DealContract, 
            BookA = B.Option.Skews.BookA, 
            Updated = B.Updated 
           }).GroupBy(g=>g.DealContract).Select(gr=>gr.OrderByDescending(b=>b.Updated).First()); 
+0

Das gibt mir nur einen Datensatz wie eine Take (1) Erweiterung. Ich brauche eine Liste von Datensätzen mit dem letzten Datensatz in Skew, nicht alle. die zweite Abfrage gibt 16 Datensätze statt 8 zurück, da die Tabelle Skew zwei doppelte Datensätze (oder unterschiedliche Aktualisierungsdaten) enthält – Zeus

+0

Ihre Frage ist wörtlich "Wie kann ich die zweite Abfrage ändern, um nur den neuesten Datensatz zurückzugeben". Brauchen Sie also 1 Datensatz oder eine Liste mit Datensätzen? – Kolichikov

+0

Ich werde versuchen, den Titel ein wenig zu ändern. Ich suche nach einer Liste von Datensätzen, in denen nur der letzte Datensatz in der Tabelle Skew ausgewählt ist, nicht alle. Zum Beispiel enthält Skew Datensätze mit demselben DealContract, aber unterschiedlichen Update-Daten. Wie eine Kundenauftragstabelle, bei der der Kunde und die Produkte identisch sind, das Bestelldatum jedoch anders ist. – Zeus

Verwandte Themen