[英]How do i use filter in linq against non string fields?
我在我的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(
请参阅: 就LINQ to SQL查询而言,IQueryable与IEnumerable
由于您正在执行AsEnumerable
您的查询将首先进行迭代,然后再应用过滤器。 如果应用不带AsEnumerable
的过滤器,则查询是IQueryable
并且仅在对结果集进行迭代时才应用过滤器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.