2016-06-20 7 views
1

Students.Whereの違い(x => x.City == "Lahore")。ToList(); Students.ToList()。ここで(x => x.City == "Lahore");これらのLINQクエリの違いは何

Students.Where(x=>x.City == "Lahore").ToList(); 

これは、データベースに基づいてフィルタリングされますと、これは:

Students.ToList().Where(x=>x.City == "Lahore"); 

フィルタリングされる学生はのIQueryableある場合

Students.Where(x=>x.City == "Lahore").ToList(); 

Students.ToList().Where(x=>x.City == "Lahore"); 
+0

これがなぜ投票されなかったのか分かりません。完全に合理的な簡単な質問。私は投票しました:) – SWilko

+0

SWilkoが言うように、これは合理的な質問のように思えますが、なぜそれがダウン投票になったのか(質問も高く投票されました)。下向き投票の場合、この特定の質問になぜコメントに問題があるのか​​を明確にすることができれば便利です。ありがとう。 –

答えて

1
Students.ToList().Where(x=>x.City == "Lahore") 

上記の行は、(多くの学生が存在する場合、これは非常に遅いプロセスである可能性が)最初のデータベースからすべての学生を取得し、メモリにロードされます、それは、街で学生をフィルタリングするクエリを作成します。クエリを列挙するまで、この2番目のフィルタを実際には評価しません(for-eachループや.ToList()を呼び出すなど)。もし上記の行で

Students.Where(x=>x.City == "Lahore").ToList(); 

最初の都市ラホール(Students.Where(X => x.City ==「ラホール」))で、すべての学生を取得するクエリを作成します。これは実際には結果セットではなく(まだ)結果を返すことができるクエリだけです。実際に結果をメモリに取り込むには、すぐに.ToList()を呼び出して列挙子を呼び出す必要があります。これはラホールの学生のみを記憶に引き込む。

2

メモリ内にある。

+1

Linq-To-Objectでさえも、最初にリストが作成されるので、メモリー・コレクション内では、問合せを再実行せずに複数回再利用できます。 2つ目は完全な入力シーケンスからスラッシュリストを作成し、その上にクエリを作成します。したがって、このクエリを使用する場合は、常にそのスラッシュリストを作成してクエリを実行します。 –

関連する問題