需要帮助在ELinq中设计查询

时间:2009-11-29 18:55:18

标签: 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.Group.Category.CategoryId = _
                          categoryId).Count > 0 _
             Distinct

我觉得我可以提高性能,因为上面的查询是(如果我错了,请纠正我)执行2次往返服务器;计数1次,然后执行。

我想将这个Count事件发送到DB,因此它应该只是往返服务器的一次。

即使这不是确切的事情,这实际上是我需要的:

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。

任何建议都会非常受欢迎!

1 个答案:

答案 0 :(得分:1)

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

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