[英]Big Tables in Entity Framework
我在Windows Azure Server中有一个WEB SQL,我需要在具有40.000行的表中搜索一个项目。 查询的执行时间是一分钟,对于Web应用程序(或任何类型的应用程序..)来说太长了。 如何减少这个时间?
我的问题与此类似: 实体框架非常大的表列表 ,但是答案不可接受,因为分页的方法也很大。
搜索代码:
public ActionResult SearchNcm(string typeSearch, string searchString)
{
var ncms = repository.VIEWNCM.ToList();
if (Request.IsAjaxRequest())
{
if (!String.IsNullOrEmpty(searchString))
{
switch (typeSearch)
{
case "cod":
ncms = ncms.Where(e => e.CODIGO_LEITURA.ToLower().Contains(searchString.ToLower()) || e.CODIGO.ToLower().Contains(searchString.ToLower())).ToList();
break;
default:
ncms = ncms.Where(e => e.DESCRICAO.ToLower().Contains(searchString.ToLower())).ToList();
break;
}
}
}
return PartialView("BuscarNcm", ncms);
}
不是答案,但是我需要空间来扩展上面的评论:
请记住,除非您迭代或调用ToList(),否则IQueryable和IEnumerable不会做任何事情。 这意味着您可以执行以下操作:
var ncms = repository.VIEWNCM; // this should be IQueryable or IEnumerable - no query yet
if(Request.IsAjaxRequest())
{
if(!string.IsNullOrEmpty(searchString))
{
switch(typeSearch)
{
case "cod":
// No query here either!
ncms = ncms.Where(e => e.CODIGO_LEITURA.ToLower().Contains(searchString.ToLower()) || e.CODIGO.ToLower().Contains(searchString.ToLower()));
break;
default:
// Nor here!
ncms = ncms.Where(e => e.DESCRICAO.ToLower().Contains(searchString.ToLower()));
break;
}
}
}
}
// This is the important bit - what happens if the request is not an AJAX request?
else
{
ncms = ncms.Take(1000); // eg, limit to first 1000 rows
}
return PartialView("BuscarNcm", ncms.ToList()); // finally here we execute the query before going to the View
如果searchString为空,您可能还需要一个默认过滤器
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.