2016-08-07 8 views
0

Wenn ich Entity Framework mit OrderBy und Skip und Take verwende, gibt es doppelte Datensätze und einige Datensätze werden nicht angezeigt.C# Entity Framework-Sortierung und Paging mit unerwarteten Ergebnissen

Dies ist der Code:

jobs = context.Jobs.Include("Company"). 
       OrderBy(x => x.Company.Name). 
       Skip((page - 1) * PageSize). 
       Take(PageSize).ToList(); 

Allerdings, wenn ich von einigen Job Eigenschaft wie x => x.Title bestellen, gibt es keine Probleme. Das Problem tritt nur beim Sortieren mit einer verwandten Entität des Jobs auf. In meinem Code haben Job und Company eine Eins-zu-viele-Beziehung.

Bitte helfen Sie mit.

Dank

Antwort

3

Ihre Anfrage, die Reihenfolge der resultierenden Reihen nicht vollständig definieren.

sagen, wir haben eine Tabelle:

Id Name 
1 Bar 
2 Foo 
3 Bar 

Wenn durch Name die folgenden Ergebnismengen Bestellung möglich sein:

Id Name 
1 Bar 
3 Bar 
2 Foo 

und

Id Name 
3 Bar 
1 Bar 
2 Foo 

Jeder Anruf jeder zurückkehren Wenn wir Seitengröße 1 haben, ist es möglich, strang zu bekommen Das Ergebnis lautet:

Id Name 
1 Bar // 1st set 
1 Bar // 2nd set 
2 Foo // 1st set 

Das Hinzufügen einiger eindeutiger Attribute (PK in den meisten Fällen) zu Ihrem Schlüssel wird dieses Verhalten beheben.

Gegeben Schlüssel Name, Id gibt es nur eine mögliche Folge:

Id Name 
1 Bar 
3 Bar 
2 Foo 

So Ihre Abfrage sollte wie folgt aussehen (vorausgesetzt JobId ist PK):

jobs = context.Jobs.Include("Company"). 
      OrderBy(x => x.Company.Name). 
      ThenBy(x => x.JobId). 
      Skip((page - 1) * PageSize). 
      Take(PageSize).ToList(); 
+0

Dank. Es hat das Problem behoben. Aber warum waren die Ergebnisse in Ordnung, wenn sie nach Titel geordnet wurden, aber falsch, wenn sie von einer verwandten Entität von Job wie Company.Name bestellt wurden? –

Verwandte Themen