Here are the list of methods for selecting users by different parameters.
For example I want to call GetUsers(string email, bool isActive).
Will Linq2Sql selects a list of all active users with GetUsers(bool isActive) and pass this list to GetUsers(int userId, bool isActive)? Or I’ll have only one call to a database in 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));
}
Using IQueryable defers the SQL execution and chains the select statement, so there will only be one request.
If you had used IList or anything other that IQueryable this would not be the case however.