エンティティフレームワーク(ef)を使用していますが、次のエラーが表示されます。
「クエリの結果を複数回列挙することはできません。」.
Efデータコンテキストを含むリポジトリクラスがあります。次に、リポジトリのインスタンスを含むコントローラークラス(MVCコントローラーと混同しないでください)があります。これまでのところ良い...私は、RadComboBoxItemData
の配列を返すことになっているコントローラー上に、Telerik RadComboBoxコントロールを取り込むために使用される検索メソッドを持っています。
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();
}
コードをデバッグすると、foreachループに入ることができますが、次のエラーが表示されます。
タイプ 'System.InvalidOperationException'の例外がSystem.Data.Entity.dllで発生しましたが、ユーザーコードでは処理されませんでした
追加情報:クエリの結果を複数回列挙することはできません。
私のエンティティは、既存のストアドプロシージャの関数インポートを使用します。
// 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);
}
関数import Search
は、ストアドプロシージャを呼び出してSearchItem
のコレクションを返します。
Foreachループはefの何かのために反復できないと感じています。
ToList()
を呼び出して、結果を明示的に列挙してみてください。
変化する
foreach (var item in query)
に
foreach (var item in query.ToList())
これを交換してみてください
var query = context.Search(id, searchText);
と
var query = context.Search(id, searchText).tolist();
そして、すべてがうまく機能します。