繁体   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