Row_number über (Partition by yyy) im Entity Framework

8

Ich möchte Daten mit Row_number über Partition mit EF laden.

%Vor%

diese Abfrage ist meine Erwartung.

Ich versuche, diesen Ausdruck zu verwenden, aber leider Zip-Erweiterung Methode nicht in ef

erkennen %Vor%

Ich habe mehr als 20000000 Datensätze in der SerialFlows-Tabelle.

** Bearbeitet

%Vor%

*** Durch diese Abfrage gelöst

%Vor%     
Mahdi Farhani 13.10.2015, 09:00
quelle

1 Antwort

8

Aus Ihrer SQL-Abfrage müssen Sie zunächst alle nach dem in PARTITION BY clause gruppieren und jede Gruppe nach Datum sortieren. Projizieren Sie dann jede Gruppe, um jeden Eintrag mit seinem Index einzuschließen. Dann SelectMany , um alle Gruppen zu reduzieren, dann Filter anzuwenden und schließlich das gewünschte Ergebnis zu projizieren. Sie können sehen, dass wir die sogenannte Zip überhaupt nicht benötigen.

Bearbeiten : Sie müssen nach der Zeilennummer filtern, sehen aber aus wie die Select -Methode und akzeptiert nicht Expression<Func<T,int,TResult>> (wie auch Zip Methode in Linq To Entity). Ich glaube nicht, dass es das Problem ist, den Ausdrucksbaum zu erstellen, was bedeutet, dass er sogar manuell erstellt wird. Er wird dennoch nicht unterstützt. Ich denke, Sie können einen Workaround nutzen, bei dem Sie die gewünschte Zeile immer noch mit Skip und Take filtern können.

Der folgende Code filtert nur die erste Zeile in jeder Gruppe (entspricht der Bedingung rn == 1 ):

%Vor%

Der Where filtert nur für einen Wert von GoodsID , so dass GroupBy den GoodsID nicht in den Schlüssel aufnehmen muss. Daher wäre es einfacher:

%Vor%

Ich hoffe, Sie verstehen die Idee, Skip und Take in verschiedenen Fällen anzuwenden.

    
King King 13.10.2015, 10:28
quelle