2012-03-26 61 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语句。