First define a static class
1 Public Static classqueryassembly2 {3 /// <summary>4 ///returns True5 /// </summary>6 /// <typeparam name= "T" ></typeparam>7 /// <returns></returns>8 Public StaticExpression<func<t,BOOL>> true<t>()9 { Ten returnf =true; One } A - /// <summary> - ///false the /// </summary> - /// <typeparam name= "T" ></typeparam> - /// <returns></returns> - Public StaticExpression<func<t,BOOL>> false<t>() + { - returnf =false; + } A at /// <summary> - ///or - /// </summary> - /// <typeparam name= "T" ></typeparam> - /// <param name= "Expr1" ></param> - /// <param name= "EXPR2" ></param> in /// <returns></returns> - Public StaticExpression<func<t,BOOL>> or<t> ( ThisExpression<func<t,BOOL>> Expr1,expression<func<t,BOOL>>expr2) to { + varinvokedexpr = Expression.invoke (Expr2, Expr1. Parameters.cast<expression>()); - returnExpression.lambda<func<t,BOOL>> the (Expression.or (expr1. Body, invokedexpr), Expr1. Parameters); * } $ Panax Notoginseng /// <summary> - /// and the /// </summary> + /// <typeparam name= "T" ></typeparam> A /// <param name= "Expr1" ></param> the /// <param name= "EXPR2" ></param> + /// <returns></returns> - Public StaticExpression<func<t,BOOL>> and<t> ( ThisExpression<func<t,BOOL>> Expr1,expression<func<t,BOOL>>expr2) $ { $ varinvokedexpr = Expression.invoke (Expr2, Expr1. Parameters.cast<expression>()); - returnExpression.lambda<func<t,BOOL>> - (Expression.and (expr1. Body, invokedexpr), Expr1. Parameters); the } -}
Query method
1 PublicPaging<daml> QUERYAJML (intPageNo,intPagesize,daml data)2 {3paging<daml> result =NULL;4Expression<func<daml,BOOL>> Expwhere = queryassembly.true<daml>(); 5 using(Istatelesssession session =_sessionfactory.openstatelesssession ())6 {7 varQuerydaml = Session. Query<daml>();8 9 if(!string. IsNullOrEmpty (data. MLH))Ten { OneExpwhere=expwhere.or (x=>X.MLH. Contains (data. MLH)); A } - - if(!string. IsNullOrEmpty (data. QZH)) the { -Expwhere = expwhere.or (x =X.MLH. Contains (data. Qzh)); - } - + //Enquiry - Querydaml.where (expwhere); + A //Sort atQuerydaml.orderby (x=>x.id); - - //pages -Result. PageNo =PageNo; - //number of records per page -Result. PageSize =pageSize; in //Total Record Count -Result. RecordCount =Querydaml.count (); to //Total Pages +Result. PageCount = (result. RecordCount + result. PageSize-1) /result. PageSize; - //Return Data theResult. Currentlist =NewList<daml>(); *Result. Currentlist =querydaml.tolist (); $ }Panax Notoginseng returnresult; -}
LINQ multi-conditional query where stitching + paging