2012-02-12 7 views
0

.Tolist()を使用して、モデル法(の有無にかかわらず)動作します呼び出し: - 以下を使用して私は私のasp.net MVC Webアプリケーション内の以下のモデル法をしている

public IQueryable<User> searchusers(string q, int id) 
     { 
      return from u in entities1.Users 
       where (!u.Users_Classes.Any(c => c.ClassID == id) && (u.UserID.Contains(q)) 
        select u; 
} 

と呼ばれますアクションメソッド: - 私は.ToList()を削除する場合

[AcceptVerbs(HttpVerbs.Post)] 
       public PartialViewResult Search(string q, int classid) 
       { 

        var users = r.searchusers(q, classid).ToList(); 

        ViewBag.id = classid; 
// code does here 
       } 

は今、私のアクションメソッドのコードはまだ正常に動作します,,そう.ToList()メソッドは、任意の利点や特徴を持って使ってますか? BR

編集: - ここ は私のアクションメソッドの完全なコードです: -

[AcceptVerbs(HttpVerbs.Post)] 
      public PartialViewResult Search(string q, int classid) 
      { 

       var users = r.searchusers(q, classid).ToList(); 
           ViewBag.id = classid; 
       return PartialView("_usersearch", users); 

      } 
+0

LINQに関するいくつかの記事をご覧ください。この質問と[前の質問](http://stackoverflow.com/questions/9245933/why-using-count-with-iquery-is-considered-infeasible)はLINQの機能です。使用法に関する特定の質問がある場合は、LINQに質問してください。 – Eranga

+0

作成されたユーザー変数がコードで使用されていないか、コードが削除されていますか? –

+0

コードの更新を参照してください。私はちょうど私の質問に必要なコードのサンプルを提供しました.BR –

答えて

2

あなたがToListメソッドを呼び出すと、あなたはすぐにクエリを実行するためにEntity Frameworkのを聞いて、次に必要になりますメモリコレクションで作業してください。それ以外の場合は、結果をループするときにクエリが実行されます。

+0

私はコントローラで結果をループしていません、代わりに私はビューに "varユーザー"を送信しているので、クエリが実行されるビューレベルでモデルオブジェクトをループします!!フルコードのために私の編集を参照してください.BR –

+1

はい、それは正しいです。 LINQでは、クエリをスタックし、結果が実際に必要なときにすべてが実行されます。これは、結果をループしたり、 'ToList()'、 'ToArray()'などのメソッドを使ってコレクション全体を取得したときに発生します。 –

+0

John、そうです。通常、私はコントローラ機能でToListもやっているので、返されるものを簡単に判断することができます。ビューページで何が起こっているのか分かりにくいです。しかし、遅延実行の大きな利点は、必要なときに実行することだけです。 –

関連する問題