使用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));
    }

使用Linq2Sql从基类调用方法

使用IQueryable会延迟SQL执行并链接select语句,因此只有一个请求。

如果您使用了IList或任何其他IQueryable,则不会出现这种情况。

这实际上取决于查询提供程序。在您的案例中,它是经过优化的Linq2Sql。其他GetUsers重载将把条件添加到表达式中。第一次实际从IQueryable实例获取数据时,它将被转换为SQL语句。