2009-07-01 8 views
0

Ich bin mit einem sehr seltsamen Problem.Linq nicht richtige Artikel in einer großen Tabelle

Ich habe eine Tabelle mit mehr als 800.000 Datensätze und 2GB MDF-Datenbank.

Wenn ich versuche, die letzten Datensätze zu erhalten:
Ich bekomme nur die Datensätze bis vor einem Monat, die letzten nicht angezeigt.

Aber wenn ich die Auswahl auf die letzten IDs beschränken, dann bekomme ich das erwartete Ergebnis.

Dim Items = From Item In DB.Items _ 
      Where Item.CatID = CatID _ 
      And Item.ID > 600000 _ 
      Order By Item.PubDate Descending _ 
      Select Item Take 100 

Also, was ist hier los.
Hat Linq eine Begrenzung der Datensätze, die abgefragt werden können?

+0

Was passiert, wenn Sie die entsprechende Abfrage in SQL ausführen? Linq2Sql sollte es in etwas wie konvertieren (Oder aktivieren Sie Linq2Sql Ablaufverfolgung, um die genaue Abfrage zu erhalten: "SELECT TOP 100 * FROM ItemsTable WHERE CatId = ORDER BY PubDate DESC" Liefert die Abfrage was Sie erwarten? Auch nur für die allgemeine Intelligenz, Stellen Sie sicher, dass Sie einen Index für CatId und PubDate (DESC) haben, wenn diese Abfrage eine allgemeine ist – Talljoe

+0

Was ist der Pubdate des 100. Datensatzes in den beiden Szenarien? –

+0

vielleicht hätte ich diesen Kommentar ein wenig erweitert. Die Art von Szenario Sie Beschreibung könnte durch unterschiedliche Kultur auf der Plattform, auf der die Abfrage ausgeführt wird, und durch die Kultur der Datenbank ausgelöst werden (in dem Fall, dass das Datum als Datum und nicht als Tick in der Datenbank gespeichert wird) –

Antwort

0

Vielleicht könnte es tun:

Dim Items = From Item In DB.Items _ 
     Where Item.CatID = CatID _ 
     Order By Item.PubDate _ 
     Select Item Take 100 

Da Sie von Item.PubDate Descending Bestellung wurden entfernt ich die Descending, so dass Sie die ersten 100 Datensätze aus den frühesten Aufzeichnungen des jeweiligen Item.PubDate Feldes nehmen würden.

+0

Nein, die letzten Elemente haben das höchste PubDate, das macht keinen Unterschied. – InfoStatus