Performance 需要在ELinq中设计查询的帮助吗

Performance 需要在ELinq中设计查询的帮助吗,performance,entity-framework,linq-to-entities,inner-join,roundtrip,Performance,Entity Framework,Linq To Entities,Inner Join,Roundtrip,这是我的疑问: 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.Gr

这是我的疑问:

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次往返;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)
我希望可以使用此存储过程(即函数导入等),但我需要
包括(“供应商”)
,这限制了我使用Linq进行操作。


任何建议都会受到欢迎

它可能没有两次访问数据库。它将在执行之前得到优化,在您尝试读取数据之前不会执行任何操作


通常我会检查使用SQL探查器创建的SQL。我还发现LinqPad非常有用。

我不确定它是否会命中两次,如果它可以是一个“单一”SQL查询,那么它可能应该翻译——尽管这是一个有趣的问题。您应该能够查看它发送的SQL(如果我知道我会马上给出答案的话!)。