簡體   English   中英

如何在linq中針對非字符串字段使用過濾器?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM