2016-09-04 4 views
3

私は偉大なデータテーブルで動作するクエリを持っています。クエリのコードは次のとおりです。テキストボックスが編集されたときだけC#クエリ

var getExtInv = snd.external_invoices.OrderByDescending(x => x.date).ToList(); 
var query = (from c in getExtInv 
      join o in snd.invoices on c.idexternal_invoices equals o.id_external_invoice 
      select new {c.idexternal_invoices, 
         c.businessname, 
         o.number, 
         c.message, 
         c.price, 
         c.date, 
         c.tipologiaPagamento, 
         c.esitoPagamento, 
         c.iduser 
         }).ToList(); 

このクエリは、空にできるテキストボックスの値の数でフィルタリングする必要があります。つの検索フィルタの例である:

if (txtIdUser.Text != "") 
{ 
    int idUserSel = Convert.ToInt32(txtIdUser.Text); 
    query = query.Where(x => x.iduser == idUserSel).ToList(); 
} 

問題は、このアプローチを用いて、最初に、次いで充填テキストフィールドの有無に基づいてフィルタリングデータの非常に高い数をロードすることです。そうすることで、最初のローディング時間は非常に長くなります。どのようにプロセスをスピードアップできますか?すべて

+2

は、 'ToListメソッド()'の呼び出しをオフのままに(データベースではなく)メモリ内でも実行されます。ちょうど1つの 'ToList()'が最後にあります。 – poke

答えて

2

おかげで述べたように、あなたが結果を使用する準備ができている前に、.ToList.ToArray.Countなどを使用しないでください。

int i = 0; 
var query = from c in snd.external_invoices.OrderByDescending(x => x.date) 
      join o in snd.invoices on c.idexternal_invoices equals o.id_external_invoice 
      select new {c.idexternal_invoices, c.businessname, o.number, c.message, 
         c.price, c.date, c.tipologiaPagamento, c.esitoPagamento, c.iduser }; 

if(int.TryParse(txtIdUser.Text, out i) // this will check if text is not empty and valid int 
    query = query.Where(x => x.iduser == i); 

、あなたは結果を使用する準備ができている最後に:これはに後でクエリを引き起こし、メモリにすべてのデータを置くよう

var results = query.ToList(); 
関連する問題