Question

Voici ma requête:

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

J'ai le sentiment que je peux améliorer les performances, car la requête ci-dessus est (corrigez-moi si je me trompe) effectue 2 allers-retours au serveur; 1 fois par le compte, puis quand il est exécuté.

Je souhaite envoyer ce compte à la base de données. Il ne devrait donc y avoir qu'un aller-retour vers le serveur.

Même si ce n'est pas la chose exacte, c'est ce dont j'ai besoin:

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)

J'aimerais pouvoir utiliser ce SPROC (c.-à-d. l'importation de fonctions, etc.), mais je dois inclure ("fournisseur") , ce qui me contraint à le faire avec Linq.

Toutes les suggestions seront les bienvenues!

Était-ce utile?

La solution

Il ne s'agit probablement pas de deux visites dans la base de données. Il sera optimisé avant son exécution et rien ne sera exécuté tant que vous n’aurez pas essayé de lire les données.

Normalement, je vérifie le code SQL créé à l'aide de SQL Profiler. J'ai aussi trouvé que LinqPad était très utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top