2012-03-26 15 views
0

ここでは、さまざまなパラメータでユーザーを選択する方法の一覧を示します。 たとえば、GetUsers(string email, bool isActive)に電話します。 Linq2SqlはすべてのアクティブユーザのリストをGetUsers(bool isActive)で選択し、このリストをGetUsers(int userId, bool isActive)に渡しますか?または、GetUsers(string email, bool isActive)にデータベースへの呼び出しを1つだけ持ちますか?Linq2Sqlを使用した基本クラスからメソッドを呼び出す

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)); 
    } 
+0

"または、データベースへの呼び出しは1つしかありません"。 SQLプロファイラで試して、データベースに送信されるSQLクエリの数を確認してください。 – Steven

答えて

1

IQueryableを使用すると、SQLの実行が遅延され、select文がチェインされるため、1つのリクエストしか存在しません。

IListまたはIQueryable以外のものを使用していた場合、これは当てはまりません。

1

これは実際にはクエリプロバイダによって異なります。あなたの場合、Linq2Sqlはかなり最適化されています。他のGetUsersオーバーロードは、式に条件を追加します。初めて実際にインスタンスからデータを取得すると、SQL文に変換されます。

関連する問題