0
この動作を説明してください:(と私は確信している私は、foreachループ内でデバッグすることができますので、いくつかの出力がなければならない任意のJSONデータを返しません私はこのように書き機能を持っている
IEnumerable<News> articles = _repository.GetLatestNews();
foreach (News news in articles) {
news.IsFetched = true;
_repository.Save();
}
return Json(articles, JsonRequestBehavior.AllowGet);
)。
私は、次のコードを変更:
IEnumerable<News> articles = _repository.GetLatestNews();
var jsonArticles = articles.ToList();
foreach (News news in articles) {
news.IsFetched = true;
}
_repository.Save();
return Json(jsonArticles, JsonRequestBehavior.AllowGet);
私が所望の出力を得ます。
今私は不思議ですが、なぜこれが起こりますか?この行動の理由は何ですか?実際に実行し、熱心にデータをフェッチするクエリを強制的に
var jsonArticles = articles.ToList();
:
'' return'文でブレークポイントを設定すると、 'articles'に値が入りますか? –
JSONとMVCから独立している必要があります。私の推測では、linq2sqlのGetLatestNews()の結果は、列挙するたびにクエリを起動する列挙型であると考えられます。 foreachでは、後で照会結果から除外されるように項目を変更します。 IEnumerableを再び列挙するJSONシリアライザを呼び出すと、再度クエリが実行され、その時とは異なる結果が得られます。 ToList()を呼び出すと、メモリ内のリストにデータがロードされます。クエリを再実行しないで、必要なだけ何度でも列挙できます。 –