这是我的疑问:
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。
任何建议都会非常受欢迎!
答案 0 :(得分:1)
可能没有两次去数据库。它将在执行之前得到优化,在您尝试读取数据之前不会执行任何操作。
通常我会检查使用SQL事件探查器创建的SQL。我也发现LinqPad非常有用。