我有一个服务函数来查询SQL数据库,如下所示:
public IQueryable<MyModel> getAll()
{
IQueryable<MyModel> models = (from f in db.MyModel select f);
return models;
}
当我在我的控制器中实现它时,它链接Take():
var models = myModelEntities.getAll().Take(5);
return View(models); // returns 5 rows to the view
但是这样不是:
var models = myModelEntities.getAll();
models.Take(5);
return View(models); // returns thousands of rows to the view
如果没有链接,为什么忽略Take()?我在我的模型上启用了延迟加载...
答案 0 :(得分:2)
这是因为Take
不会改变当前的IEnumerable
;它返回一个新的。这将有效:
models = models.Take(5);
答案 1 :(得分:2)
确实有效,但您没有将Take()
的结果分配给任何内容。 Take()
不会改变models
变量,它会返回枚举中的前5项。
以下将工作:
var models = myModelEntities.getAll();
models = models.Take(5);
return View(models); // returns five rows to the view
答案 2 :(得分:1)
您没有将第二次Take()调用的结果分配给任何变量。