0

设计查询帮助这是我的查询:需要在ELinq

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事件发送到数据库,所以它应该只是一次往返服务器。

即使它不是确切的事情,其实这正是我需要的:

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) 

我希望我可以用这个存储过程(即功能导入等),但我需要Include("Vendor"),这限制了我与Linq一起完成。

任何类型的建议将非常欢迎!

+0

我不确定它会撞击两次,如果它可以是一个“单个”SQL查询,那么它可能应该翻译 - 但有趣的问题。你应该可以看看它发送的SQL(如果我知道离手的话我会给出答案!)。 – Murph 2009-11-29 19:02:57

回答

1

它可能不会执行两次到数据库。它在执行之前会得到优化,在您尝试读取数据之前什么都不会执行。

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