Linq要实体优化

时间:2012-12-10 17:08:40

标签: linq entity-framework

我有以下linq to entity query

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

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

是否有更好的方法来优化此查询?

由于

2 个答案:

答案 0 :(得分:0)

我认为你在DiscountCodesProducts表之间存在关系。我的意思是DiscountCodes表有ProductId ForeignKey

然后这应该更好

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

答案 1 :(得分:0)

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

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