lambda 多条件组合查询 动态传参
首先,是必不可少的,大概了解了一下lambda 多条件组合查询的方向,这里首先,写一个委托的方法:
1 private bool GetCondition(RP_OrderMain ordermain) 2 { 3 bool resbool = true; 4 if (filterSaleman != null) 5 resbool &= ordermain.Saleman.ToString().Contains(filterSaleman); 6 if (SerStartTime != null) 7 resbool &= ordermain.CreatedDate >= SerStartTime; 8 return resbool; 9 }
这时候 组合查询就完成了,下面在需要调用的地方使用就可以了,具体使用过程如下:
先引用:using System.Linq.Expressions;
1 private void GetOrderList() 2 { 3 List<RP_OrderMain> ListOrderMain = new List<RP_OrderMain>(); 4 Expression<Func<RP_OrderMain, bool>> expr = n => GetCondition(n); 5 var linqcond = ListOrderMain.Where(expr.Compile()); 6 //....后面就该干嘛干嘛了 7 }
下面再介绍下lambda传参的方法,先搞定方法再调用吧
1 #region 获取带排序和条件的分页列表数据 2 public List<T> GetPageList(int pageindex, int pageSize, Expression<Func<K, DateTime>> expr, Expression<Func<K, bool>> condexpr) 3 { 4 //Func<K, DateTime> result = expr.Compile();//这里不要也可以 5 //Func<K, bool> condresult = condexpr.Compile();
//下面是你需要用到的语句,我这个地方是一个泛型的例子,你可以根据你自己的情况动态的写 6 var memberList = _localDb.GetTable<K>().Where(condexpr).OrderByDescending(expr).Skip((pageindex - 1) * pageSize).Take(pageSize).ToList();
7 }
下面是调用上面的方法
1 Expression<Func<PerstProduct, DateTime>> expr = p =>p.UpdateDate;//因为UpdateDate是时间,所以用的是DateTime。
2 Expression<Func<PerstPurchase, bool>> condexpr = p => p.PurchaseBatch.Contains(cond) || p.PurchaseBatch.Contains(cond);
3 var PageDataToReturn = GetPageList(pageindex, pageSize, expr, condexpr);
上面就是一个简单的lambda传动态值的实例了,有什么不足之处,希望拍砖。
以上仅是我参照网上的例子做的简单型的lambda多条件查询,这个算比较简单的了,希望对大家有用。