仅在编辑文本框时进行C#查询

时间:2016-09-04 12:16:01

标签: 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();
 }

问题在于,使用这种方法最初加载大量数据,然后根据填充的文本字段的存在或不存在进行过滤。这样做的初始加载时间非常长。我怎样才能加快这个过程?

感谢所有

1 个答案:

答案 0 :(得分: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();