我有以下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
这似乎不是很有效,特别是如果我需要开始在相关表上添加更多计数。
是否有更好的方法来优化此查询?
由于
答案 0 :(得分:0)
我认为你在DiscountCodes
和Products
表之间存在关系。我的意思是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()
}