我有一个可以处理好数据表的查询。查询的代码是:
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();
}
问题在于,使用这种方法最初加载大量数据,然后根据填充的文本字段的存在或不存在进行过滤。这样做的初始加载时间非常长。我怎样才能加快这个过程?
感谢所有
答案 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();