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

Entity Frameworkは、外部キー関係を介して親テーブルと子テーブルの間に関係を作成します。したがって、この場合、以下のクエリが機能するはずです。

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