0

これは私のクエリです:

Dim vendorId = 1, categoryId = 1
Dim styles = From style In My.Context.Styles.Include("Vendor") _
             Where style.Vendor.VendorId = vendorId _
             AndAlso (From si In style.StyleItems _
                      Where si.Item.Group.Category.CategoryId = _
                          categoryId).Count > 0 _
             Distinct

上記のクエリは(間違っていれば訂正してください)サーバーへの2回の往復を実行するため、パフォーマンスを改善できると感じています。Count によって 1 回、次に実行されたときに。

このカウントをDBに送信したいので、サーバーへの往復は1回だけです。

それは正確なものではありませんが、これは実際に私が必要とするものです:

SELECT DISTINCT Style.* 
FROM Style INNER JOIN
    Vendor ON Style.VendorId = Vendor.VendorId INNER JOIN
    StyleItem ON Style.StyleId = StyleItem.StyleId INNER JOIN
    Item ON StyleItem.ItemId = Item.ItemId INNER JOIN
    [Group] ON Item.GroupId = [Group].GroupId INNER JOIN
    Category ON [Group].CategoryId = Category.CategoryId
WHERE (Style.VendorId = @vendorid) AND (Category.CategoryId = @CategoryId)

この SPROC (つまり、関数のインポートなど) を使用できればよいのですが、必要があるためInclude("Vendor")、Linq で行う必要があります。

どんな種類の提案も大歓迎です!

4

1 に答える 1

1

データベースへの2回のトリップを行っていない可能性があります。実行前に最適化され、データの読み取りを試みるまで何も実行されません。

通常、SQLプロファイラーを使用して作成されたSQLをチェックします。また、LinqPadが非常に便利であることがわかりました。

于 2009-11-29T19:05:20.683 に答える