Linq to EF:返回 IQueryable 对象的混淆

Linq to EF : Confusion of returning IQueryable object

我知道如果我调用下面的代码,将从数据库中查询数据,return 本地内存中的实际对象。调用此代码后,以后对列表的操作不会再次调用数据库:

db.Context.Where(...).ToList()

如果我不将 ToList 与仅 Where 或 Select 调用一起使用,它将 return 一个 IQueryable<> 对象。

var data = db.Context.Where(...).Select (...) or db.Context.Where(...);

这是否意味着,该方法尚未调用数据库来获取数据,直到我调用 ToList、First() 等...

foreach (var a in data) 
{
   var b = a.SomeCollection.ToList() 
}

是的,您可以根据需要使用 IQuery<> 界面创建和操作您的查询。

如果您查看它的属性,您会发现,它都是关于处理 SQL 查询的。它有 ProviderQueryConnectionString 等...。

实际上,当您调用 ToList<>ToArray<> 或类似的东西时,它只是命令 IQueryable 对象执行它 SQL 对数据库的查询。