gpt4 book ai didi

sql - 返回父记录时有效地获取子记录的计数

转载 作者:行者123 更新时间:2023-12-05 01:35:06 26 4
gpt4 key购买 nike

我正在使用 Entity Framework 4.1 使用 Code First 方法。我有两个表现出父子关系的实体。举一个具体的例子,假设我有一个 Category具有零对多的实体 Product与之关联的实体。我在两侧都设置了导航属性(在我的示例中,Category 实体具有 ICollection<Product> 属性,而 Product 实体具有 Category 属性)。

现在,当我收到 Category实体我还想获取每个类别的子记录数的计数。我知道我可以做到:

Category category = dbContext.Categories.Single(...);
int productCount = category.Products.Count();

但我很担心,因为发送到数据库的结果 SQL 取决于我是使用延迟加载还是预先加载。

在第一种情况下(延迟加载),调用 Products集合提示 EF 运行 SQL 查询,如:
SELECT ... all columns ...
FROM Products
WHERE CategoryID = @CategoryID

在第二种情况下(急切加载),当检索类别信息时加载产品,因此没有对数据库的第二次查询,但缺点是如果我对产品根本不感兴趣(除了它们的数量)然后我带回了很多不需要的数据。

我希望它拥有两全其美的功能:即能够只有一个数据库查询和一个使用 SELECT COUNT(*) 的功能。而不是从表中获取所有列。简而言之,我希望将以下 SQL 发送到数据库:
SELECT ... all category columns ...,
(SELECT COUNT(*) FROM Products p WHERE p.CategoryID = c.CategoryID)
FROM Categories c
WHERE c.CategoryID = ...

这对 EF 来说是可能的还是我想要的白日梦?

最佳答案

不确定,但可以试试这个:

var result = db.Categories.Where(x => x.CategoryId == categoryId)
.Select(y => new
{
Count = y.Products.Count(),
Category = y
})
.Single();

//result.Count

//result.Category

关于sql - 返回父记录时有效地获取子记录的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8335310/

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