gpt4 book ai didi

entity-framework - 迭代 DbSet 与 IQueryable

转载 作者:行者123 更新时间:2023-12-04 11:08:04 24 4
gpt4 key购买 nike

使用 Entity Framework ,我从表中选择一些数据并使用 foreach 循环对其进行迭代。我想知道以下示例中何时查询数据?

示例 1。

var countries = db.WorldCountries;
foreach(var item in countries)
{
Console.WriteLine("Country: {0}", item.Country);
}

示例 2。
var countries = db.WorldCountries.Where(t => t.Country == "Country Name");
foreach(var item in countries)
{
Console.WriteLine("Country: {0}", item.Country);
}

在第一个示例中, countriesDbSet<WorldCountries> 在第二个示例中, countriesIQueryable<out WorldCountries>

没有上面例子中的 .ToList() 数据如何检索?是在 foreach 循环开始时检索整个数据集(就像在第一次迭代开始时调用 .ToList() 一样)还是在循环的每次迭代中向数据库发出查询。

谢谢。

最佳答案

在这两个示例中,IQueryable<WorldCountries> 被编译为 SQL 并在您输入 foreach 时执行(当 foreach 调用 GetEnumerator 时)。因此,您在第一次迭代之前从数据库接收结果,而不是在每次迭代中逐个接收。(结果来自 DataReader,因此每次迭代的实际数据传输可以逐个完成,但我的意思是,有不是每次迭代的单独 SQL 查询)。

请注意, DbSet<T> 也实现了 IQueryable<WorldCountries> ,因此您的两个示例的工作方式相同,只是第二个示例恰好包含一个 where 子句。

当您添加 .ToList 时,它​​会在返回之前迭代并填充列表,因此在这种情况下,您可以在继续下一个语句之前从数据库传输所有必要的数据。

关于entity-framework - 迭代 DbSet<TEntity> 与 IQueryable<out T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18216226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com