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 次,然后在执行时执行。

我想把这个 Count 东西发送到数据库,所以它应该只是到服务器的一次往返。

即使它不是确切的东西,这实际上是我需要的:

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

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

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

于 2009-11-29T19:05:20.683 回答