2010-11-19 4 views
2
dataGridView1.DataSource = (from x in db.Employees 
          where x.FirstName.Contains(textBox1.Text) 
          select x); 

私はtxtSearch_TextChangedイベントで上記の式を使用して、結果をリアルタイムでフィルタリングしています。結果を得るためにキーが押されるたびにデータベースが呼び出されますか、または何らかの形でメモリに結果がキャッシュされ、フィルタリングされて返されますか?これはLINQのようなリアルタイムフィルタを実行する正しい方法ですか?このLINQクエリは各フィルタのデータベースを呼び出しますか?

Northwind db = new Northwind(@"Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"); 


private void txtSearch_TextChanged(object sender, EventArgs e) 
    { 

     dataGridView1.DataSource = (from x in db.Employees 
            where x.FirstName.Contains(textBox1.Text) 
            select x); 

    } 
+0

残りのコードを投稿できますか? – rboarman

+0

@ rboarman:更新済み! –

答えて

1

はい...キーを押すたびに呼び出すと、キーが押されるたびにデータベースが照会されます。

しかし、LINQは毎回その式をSQLにコンパイルしなければならず、それも相当量の作業です。

これは正しい方法ではありません。自動完了を行うには、最初にクライアントにデータをキャッシュする必要があります。または、少なくとも2文字分後にプル(およびキャッシュ)を開始するだけで、結果をキャッシュに制限できます。

+0

ここでどのような種類のキャッシュを使用していますか? DataTableで要件を満たすことはできますか? –

+0

それはうまくいくかもしれませんが、あまりにも重いかもしれません。おそらく 'List 'のような単純なもので、それぞれの値はユーザーの入力を開始した文字で始まります。その後、各キーを押すたびに、最初の文字が最初の文字を超えてバックスペースしていないことを確認し、そうでない場合は、オートコンプリートリストを入力したものと一致する適切な値で更新しますこれまでのところ。 –