0

我有以下 linq 到实体查询

from p in Products
where p.ProductId==1219
select new
{
    Name = p.ProductName,
    count = (from dc in DiscountCodes
        where dc.ProductId == p.ProductId
        select dc).Count()
}

现在生成的 sql 是(使用 linqpad)

-- Region Parameters
DECLARE @p0 Int = 1219
-- EndRegion
SELECT [t0].[ProductName] AS [Name], (
    SELECT COUNT(*)
    FROM [DiscountCode] AS [t1]
    WHERE [t1].[ProductId] = [t0].[ProductId]
    ) AS [count]
FROM [Product] AS [t0]
WHERE [t0].[ProductId] = @p0

这似乎不是很有效,特别是如果我需要开始在相关表上添加更多计数。

有没有更好的方法来优化这个查询?

谢谢

4

2 回答 2

0

我想你DiscountCodesProducts表之间有关系。我的意思是DiscountCodes表有ProductIdForeignKey

那么这应该更好

from p in Products
where p.ProductId==1219
select new
{
    Name = p.ProductName,
    Count = p.DiscountCodes.Count,
}
于 2012-12-10T17:16:00.277 回答
0

实体框架通过它们的外键关系创建父表和子表之间的关系。所以在这种情况下,下面的查询应该适合你。

from p in Products
where p.ProductId==1219
select new
{
    Name = p.ProductName,
    count = p.DiscountCodes.Count()
}
于 2012-12-10T17:16:29.170 回答