我在我的mvc应用程序中使用
jquery datatables插件.过滤与字符串数据类型的字段完美匹配.但我不能使用过滤非字符串字段而不首先枚举结果.这是我的代码.
public List<MerchAgreementMain> getAgreementbyAccountNo(jQueryDataTableParamModel model)
{
var entity = new CCMSEntities();
var query = (from _first in entity.First
from _second in entity.Second
where _first.No == _second.No
select new MerchAgreementMain
{
AcctNo = _Account.AcctNo, // datatype long
BusnName = _Account.BusnName,
CreatedBy = _Account.CreatedBy,
CreationDate = _Account.CreationDate ?? DateTime.MinValue,
Status = _Reflib.Descp
});
if (model.sSearch != null)
{
var x = query.AsEnumerable().Where(p => Convert.ToString(p.AcctNo).Contains(model.sSearch) || p.BusnName.Contains(model.sSearch) || p.CreatedBy.Contains(model.sSearch)||
p.Status.Contains(model.sSearch));
this.displayRecods = x.Count();
return x.ToList();
}
//var result = query.ToPagedList(Convert.ToInt16(model.sEcho),Convert.ToInt16(model.iDisplayLength));
return query.ToList();
}
这很好用.但问题是在应用过滤器之前首先枚举查询,并且数据库包含数千条记录;这似乎是一种不好的做法,在显示过滤结果之前可能需要一些延迟.如何在Iqueryable中应用过滤器很长时间?
最佳答案 代替
query.AsEnumerable().Where(....
直接应用过滤器.
query.Where(
请参阅:IQueryable vs. IEnumerable in terms of LINQ to SQL queries
由于您正在执行AsEnumerable,因此您的查询首先进行迭代,然后应用过滤器.如果您应用没有AsEnumerable的过滤器,则查询是IQueryable,它将仅在迭代结果集时应用过滤器.