2016-05-22 16 views
0

Ich habe folgende SQL-Abfrage und versucht zu LINQWie konvertiere ich diese Unterabfrage in Linq?

SELECT * 
FROM 
    (SELECT 
     *, 
     ROW_NUMBER() OVER (PARTITION BY ScannedItemId 
          ORDER BY ScannedDate DESC) AS rn 
    FROM ItemTracking) A 
WHERE 
    A.rn = 1 
    AND ScannedLoc = 1 
ORDER BY 
    ItemTrackingId DESC 

Dies gibt Artikel-ID zu konvertieren, die in der Lage sind (ScannedLoc) zur Zeit.

Ich bin neu in LINQ und finde schwierig Putting andere Beispiele zusammen, vor allem Unterabfrage und Row_Number Funktion.

Kann mir jemand den richtigen Weg zeigen?

Antwort

0

Man könnte so etwas tun:

var output = (
    from i in ItemTracking 
    group i by i.ScannedItemId into g 
    select g.OrderByDescending(t => t.ScannedDate).First() 
).OrderByDescending(t => t.ItemTrackingId); 

Aber ich bin nicht sicher, welche SQL es in übersetzen würde.

+0

Entschuldigung, MS T-SQL. Ist es möglich, anonymen Typ zurückzugeben? Ich versuchte .Select neue Liste () {?????}. ToList() aber war nicht sicher, was man einlegen ???. – shinya

+0

Die Syntax wäre '.Select (t => new {Feld = t.Field, Etc = etc}). ToList();' – Blorgbeard

+0

Ich habe gerade festgestellt, dass es keine Where ScannedLoc = 1-Klausel gibt. Wenn ich es wie hinzufügen. Wo (t => t.ScanedLoc == 1) vor dem zweiten OrderByDesending Teil, gibt es immer noch alle Zeilen zurück. First() muss die ScannedLoc-Spalte haben und wenn es 1 ist, es zurückgeben. aber nicht sicher, wo ich es hinstellen soll. – shinya

Verwandte Themen