何时在linq查询中调用Take?

时间:2014-05-21 21:00:54

标签: c# linq

所以我有这样的事情:

public IQueryable<Teachers> GetTeachers()
{
   var query = from a in this.Context.Techers
               where a.active == true
               select a
    return query;
}

然后我称之为:

List<Teachers> =  this.repo.GetTeachers().Take(5000).ToList();

让我们稍后在程序中的某个地方说我将这些记录标记为活动为假;

现在如果我再次运行此程序,它应该返回零记录吗?或者它选择&#34;接下来的5000可用&#34;活跃记录?

2 个答案:

答案 0 :(得分:2)

您正在使用LINQ to SQL(或LINQ to Entites),因此您的查询将在SQL查询中进行转换,这看起来与此类似:

SELECT TOP 5000 *
FROM techers
WHERE active = true

将返回的内容取决于db。中表的内容。

如果您将前5000条记录标记为非活动状态,则再次运行该记录将返回下一个5000个活动元素(如果表中仍有活动元素)。

答案 1 :(得分:1)

如果将查询具体化为列表,则无法再针对服务器执行该查询。 List对执行查询一无所知。只有保留IQueryable,才能重新执行查询。