wake-up-neo.com

Das Ergebnis einer Abfrage kann nur einmal aufgelistet werden

Ich verwende das Entity Framework (EF) und erhalte den folgenden Fehler:

Msgstr "Das Ergebnis einer Abfrage kann nicht mehrmals aufgelistet werden.".

Ich habe eine Repository-Klasse, die den ef-Datenkontext enthält. Ich habe dann eine Controller-Klasse (nicht zu verwechseln mit MVC-Controllern), die eine Instanz des Repositorys enthält. So weit so gut ... Ich habe eine Suchmethode auf dem Controller, die ein Array von RadComboBoxItemData zurückgeben soll, das zum Auffüllen eines Telerik RadComboBox-Steuerelements verwendet wird.

public RadComboBoxItemData[] Search(int id, string searchText)
{
    var query = context.Search(id, searchText);
    List<RadComboBoxItemData> result = new List<RadComboBoxItemData>();
    foreach (var item in query)
    {
        RadComboBoxItemData itemData = new RadComboBoxItemData();
        itemData.Text = ""; // assign some text here..;
        itemData.Value = ""; /*assign some value here..*/
        result.Add(itemData);
    }

    return result.ToArray();
}

Wenn ich meinen Code debugge, kann ich in die foreach-Schleife gelangen, aber dann erhalte ich die Fehlermeldung:

In System.Data.Entity.dll ist eine Ausnahme vom Typ "System.InvalidOperationException" aufgetreten, die jedoch im Benutzercode nicht behandelt wurde

Zusätzliche Informationen: Das Ergebnis einer Abfrage kann nur einmal aufgelistet werden.

Meine Entität verwendet einen Funktionsimport eines vorhandenen gespeicherten Prozesses.

// EF repository method calling the function imported method on the data context.
public IEnumerable<SearchItem> Search(int id, string searchText)
{
    return this.entityContext.Search(id, searchText);
}

Die Funktion import Search ruft eine gespeicherte Prozedur auf, um eine Sammlung von SearchItem zurückzugeben.

Ich habe das Gefühl, dass die foreach-Schleife aufgrund eines Problems mit ef nicht iterieren kann.

66
Halcyon

Versuchen Sie, die Ergebnisse explizit aufzulisten, indem Sie ToList() aufrufen.

Veränderung

foreach (var item in query)

zu

foreach (var item in query.ToList())
137
Yakimych

Versuchen Sie dies zu ersetzen

var query = context.Search(id, searchText);

mit

var query = context.Search(id, searchText).tolist();

und alles wird gut funktionieren.

7
hosam hemaily