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% 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
):
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:
Ich hoffe, Sie verstehen die Idee, Skip
und Take
in verschiedenen Fällen anzuwenden.
Tags und Links sql entity-framework window-functions