我有一个像这样的功能:
IEnumerable<News> articles = _repository.GetLatestNews();
foreach (News news in articles) {
news.IsFetched = true;
_repository.Save();
}
return Json(articles, JsonRequestBehavior.AllowGet);
哪个不会返回任何json数据(我确信应该有一些输出,因为我可以在foreach循环中调试)。
当我将代码更改为以下内容时:
IEnumerable<News> articles = _repository.GetLatestNews();
var jsonArticles = articles.ToList();
foreach (News news in articles) {
news.IsFetched = true;
}
_repository.Save();
return Json(jsonArticles, JsonRequestBehavior.AllowGet);
我得到了所需的输出。
现在我很好奇,为什么会这样?这种行为的原因是什么?
答案 0 :(得分:1)
这是这一行:
var jsonArticles = articles.ToList();
实际上强制查询执行并急切地获取数据。在您开始枚举GetLatestNews
方法返回的可枚举之前,不会返回任何结果。