请解释一下这种行为

时间:2011-06-19 13:12:46

标签: json linq-to-sql asp.net-mvc-3

我有一个像这样的功能:

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);

我得到了所需的输出。

现在我很好奇,为什么会这样?这种行为的原因是什么?

1 个答案:

答案 0 :(得分:1)

这是这一行:

var jsonArticles = articles.ToList();

实际上强制查询执行并急切地获取数据。在您开始枚举GetLatestNews方法返回的可枚举之前,不会返回任何结果。