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 查询的。它有 Provider
、Query
、ConnectionString
等...。
实际上,当您调用 ToList<>
或 ToArray<>
或类似的东西时,它只是命令 IQueryable 对象执行它 SQL 对数据库的查询。
我知道如果我调用下面的代码,将从数据库中查询数据,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 查询的。它有 Provider
、Query
、ConnectionString
等...。
实际上,当您调用 ToList<>
或 ToArray<>
或类似的东西时,它只是命令 IQueryable 对象执行它 SQL 对数据库的查询。