4

mvcアプリケーションでjquerydatatablesプラグインを使用しています。フィルタリングは、文字列データ型のフィールドに対して完全に機能します。しかし、最初に結果を列挙せずに、文字列以外のフィールドに対してフィルタリングを使用することはできません。これが私のコードです。

 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にフィルターを長時間適用するにはどうすればよいですか?

4

1 に答える 1

2

それ以外の

query.AsEnumerable().Where(....

フィルタを直接適用します。

query.Where(

参照:LINQtoSQLクエリに関するIQueryableとIEnumerable

クエリを実行しているのでAsEnumerable、最初に繰り返し、次にフィルターを適用します。それなしでフィルターを適用するとAsEnumerable、クエリはIQueryableであり、結果セットを反復処理するときにのみフィルターが適用されます。

于 2012-11-30T10:18:50.627 に答える