Вызов методов из базового класса с Linq2Sql - PullRequest
0 голосов
/ 26 марта 2012

Вот список способов выбора пользователей по разным параметрам. Например я хочу позвонить 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 ]

1 голос
/ 26 марта 2012

Использование IQueryable откладывает выполнение SQL и связывает оператор select, поэтому будет только один запрос.

Если бы вы использовали IList или что-либо другое, что IQueryable, это не имело бы место.

1 голос
/ 26 марта 2012

Это действительно зависит от поставщика запросов. В вашем случае это Linq2Sql, который довольно оптимизирован. Другие перегрузки GetUsers добавят критерии к выражению. Когда вы впервые получите данные из экземпляра IQueryable, они будут преобразованы в оператор SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...