以下是按不同参数选择用户的方法列表。
例如,我想拨打GetUsers(string email, bool isActive)
。
Linq2Sql会选择GetUsers(bool isActive)
的所有活跃用户的列表,并将此列表传递给GetUsers(int userId, bool isActive)
吗?或者我只能在GetUsers(string email, bool isActive)
?
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 :(得分:1)
这实际上取决于查询提供程序。在你的情况下,Linq2Sql是非常优化的。其他GetUsers
重载将为表达式添加条件。第一次从IQueryable
实例获取数据时,它将被翻译成SQL语句。
答案 1 :(得分:1)
使用IQueryable延迟SQL执行并链接select语句,因此只有一个请求。
如果您曾使用过IList或其他任何IQueryable,那么情况并非如此。