Take()仅适用于链接吗?

时间:2011-08-16 23:03:19

标签: asp.net-mvc entity-framework

我有一个服务函数来查询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()?我在我的模型上启用了延迟加载...

3 个答案:

答案 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()调用的结果分配给任何变量。