gpt4 book ai didi

c# - 具有标量结果的 LINQ 是否会触发延迟加载

转载 作者:太空狗 更新时间:2023-10-29 21:18:28 25 4
gpt4 key购买 nike

我读了 Loading Related EntitiesEntity Framework 团队发布,最后一段让我有点困惑:

Sometimes it is useful to know how many entities are related to another entity in the database without actually incurring the cost of loading all those entities. The Query method with the LINQ Count method can be used to do this. For example:

using (var context = new BloggingContext())
{
var blog = context.Blogs.Find(1);

// Count how many posts the blog has
var postCount = context.Entry(blog)
.Collection(b => b.Posts)
.Query()
.Count();
}

为什么这里需要Query + Count方法?
我们不能简单地使用 LINQ 的 COUNT 方法吗?

var blog = context.Blogs.Find(1);
var postCount = blog.Posts.Count();

这是否会触发延迟加载并将所有集合加载到内存中,然后我将获得所需的标量值?

最佳答案

您将在机器人案例中获得所需的标量值。但请考虑正在发生的事情的不同之处。

使用 .Query().Count(),您可以在数据库上运行 SELECT COUNT(*) FROM Posts 形式的查询,并将该值分配给您的整数变量。

使用 .Posts.Count,您可以在数据库上运行(类似于)SELECT * FROM Posts(已经昂贵得多)。然后将结果的每一行逐个字段映射到您的 C# 对象类型,因为集合被枚举以查找您的计数。通过以这种方式请求计数,您将强制加载所有数据,以便 C# 可以计算有多少数据。

希望很明显,向数据库询问行数(而不实际返回所有这些行)效率要高得多!

关于c# - 具有标量结果的 LINQ 是否会触发延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12510826/

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