使用Linq2Sql从基类调用方法
本文关键字:调用 方法 基类 Linq2Sql 使用 | 更新日期: 2023-09-27 18:29:12
以下是通过不同参数选择用户的方法列表。例如,我想调用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));
}
使用IQueryable会延迟SQL执行并链接select语句,因此只有一个请求。
如果您使用了IList或任何其他IQueryable,则不会出现这种情况。
这实际上取决于查询提供程序。在您的案例中,它是经过优化的Linq2Sql。其他GetUsers
重载将把条件添加到表达式中。第一次实际从IQueryable
实例获取数据时,它将被转换为SQL语句。