[英]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.