2012-03-26 90 views
0

以下是按不同參數選擇用戶的方法列表。 例如,我想撥打GetUsers(string email, bool isActive)。 Linq2Sql會選擇一個包含GetUsers(bool isActive)的所有活動用戶列表,並將此列表傳遞給GetUsers(int userId, bool isActive)?或者我在GetUsers(string email, bool isActive)只有一個數據庫調用?使用Linq2Sql從基類調用方法

internal IQueryable<User> GetUsers(bool isActive) 
    { 
     IQueryable<User> users = Context.Users; 

     if (isActive) 
      users = users.Active(); 

     return users; 
    } 

    internal IQueryable<User> GetUsers(int userId, bool isActive) 
    { 
     return this.GetUsers(isActive).Where(item => item.Id == userId); 
    } 

    internal IQueryable<User> GetUsers(string email, bool isActive) 
    { 
     return this.GetUsers(isActive).Where(item => item.Email.Equals(email, StringComparison.OrdinalIgnoreCase)); 
    } 
+0

「或者我將只有一個對數據庫的調用」。試用SQL Profiler來查看有多少SQL查詢被髮送到數據庫。 – Steven 2012-03-26 14:27:35

回答

1

使用IQueryable推遲SQL執行並鏈接select語句,因此只會有一個請求。

如果您使用過IList或其他任何IQueryable,那麼情況並非如此。

1

這真的取決於查詢提供者。在你的情況下,它是相當優化的Linq2Sql。其他GetUsers重載會將條件添加到表達式中。當你第一次從IQueryable實例中獲取數據時,它將被翻譯成SQL語句。