使用Linq2Sql从基类调用方法

时间:2012-03-26 14:21:40

标签: c# linq-to-sql

以下是按不同参数选择用户的方法列表。 例如,我想拨打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));
    }

2 个答案:

答案 0 :(得分:1)

这实际上取决于查询提供程序。在你的情况下,Linq2Sql是非常优化的。其他GetUsers重载将为表达式添加条件。第一次从IQueryable实例获取数据时,它将被翻译成SQL语句。

答案 1 :(得分:1)

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

如果您曾使用过IList或其他任何IQueryable,那么情况并非如此。