Frage

Das ist meine Abfrage:

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

Ich habe das Gefühl, dass ich die Leistung verbessern kann, Cuz die obige Abfrage (korrigiert mich wenn ich falsch bin) ist führt zwei Umläufe an den Server; 1 Mal von den Grafen und dann, wenn es ausgeführt wird.

Ich mag diese Count Sache an die DB senden, damit es nur ein Hin- und Rückfahrt mit dem Server sein sollte.

Es ist sogar nicht die genaue Sache, das ist eigentlich das, was ich brauche:

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)

Ich wünschte, ich dieses SPROC (d Funktion Import etc.) verwenden könnte, aber ich muss Include("Vendor"), die Zwänge mich mit Linq zu tun.

wird jede Art von Anregung wirklich welcommed werden!

War es hilfreich?

Lösung

Es ist wahrscheinlich nicht tun, zwei Reisen in die Datenbank. Es wird optimiert, bevor es ausgeführt wird, und nichts wird ausgeführt, bis Sie die versuchen, die Daten lesen.

Normalerweise die SQL ich überprüfen, die SQL Profiler erstellt wird. Ich habe auch LinqPad sehr nützlich sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top