2009-06-19 1 views
3

Ich habe, was ich dachte, war ein sehr einfaches Stück Code, aber die Ergebnisse sind verblüfft mich. Ich frage Entitäten ab, die LINQ verwenden, und dann über die Ergebnisse iterieren, um ein Array zu erstellen. Ich beobachte den Datenverkehr von und zur Datenbank und alles sieht gut aus. Wenn ich die Abfrage, die LINQ an SQL sendet, kopiere und sie direkt mit SQL ausführe, erhalte ich die erwarteten Ergebnisse. Wenn ich jedoch über die Ergebnisse iteriere - oder sogar die Ergebnisse beobachte -, ist jeder Datensatz genau derselbe. Dies ist NICHT was SQL zurückgibt. Was mache ich falsch?Iterieren über LINQ-Entity-Ergebnisse

var eventList = from e in entityContext.AuctionSet select e; 

ArrayList DayArray = new ArrayList(); 
int i = 0; 

foreach (Auction ae in eventList) 
{ 
    // If I put a watch on eventList all the records are the same! 
    Auction temp = ae; // Even tried copying to a temp value per another solution 

    // Even though the records are different in the database, 
    // and the correct number of records are returned, EVERY "ae" instance 
    // has the exact same values! 
    DayArray.Add(new { 
       id = i, 
       title = temp.County.ToString() 
       }); 
      i++; 
} 

Vielen Dank!

BEARBEITEN: Vergessen Sie zu erwähnen, dass die Entitäten aus einer Ansicht kommen, was angesichts des Kommentars über den Primärschlüssel sinnvoll wäre.

+3

Nur aus Neugier, warum verwenden Sie eine ArrayList? Warum verwenden Sie keine Liste ? – BFree

+0

Was ist der Typ von "EventList"? –

+0

Verwenden einer ArrayList, weil sie nach diesem Codebeispiel in JSON serialisiert wird. –

Antwort

7

Haben Sie vielleicht einen Primärschlüssel falsch konfiguriert, so dass EF denkt, dass etwas ein Primärschlüssel ist, obwohl jede Zeile denselben Wert hat? Wichtig ist, dass EF verpflichtet ist, Ihnen die gleiche Instanz jedes Mal zu geben, wenn es ein Objekt mit dem gleichen Typ + Primärschlüssel sieht, das es zuvor gesehen hat.

Also, wenn alle Ihre Einträge wie folgt aussehen:

id | title | ... 
-----+-------+------- 
1 | Foo | ... 
1 | Bar | ... 
1 | Baz | ... 
... 

und wenn EF denkt, dass id ein Primärschlüssel ist, wird es Sie zurück auf das gleiche Objekt jedes Mal geben - so werden Sie sehen, Foo, Foo, Foo ...

+0

Nice one Marc. Schöne Kreativität! –

+0

Das macht sehr viel Sinn. Die Entitäten kommen tatsächlich aus einer Sicht, also denke ich, dass Sie Recht haben. Dies wirft jedoch die Frage auf, wie Sie über Entitäten iterieren, die aus einer Ansicht kommen. Irgendwelche Ideen? –

+0

Wie sieht die Ansicht aus? Gibt es doppelte Daten in einer ID-Spalte? Ich werde einen kurzen Blick in meine lokale IDE werfen, um zu sehen, ob es offensichtliche Optionen gibt ... –