Expression動態查詢、分頁
Expression,表達式樹,以lamda表達式創建,就以表達式目錄樹的形式將強類型的lambda表達式標識為數據結構。
排序
/// <summary>
/// 根據條件排序和查詢
/// </summary>
/// <typeparam name="TKey">排序字段類型</typeparam>
/// <param name="whereLambda">查詢條件 lambda表達式</param>
/// <param name="orderLambda">排序條件 lambda表達式</param>
/// <returns></returns>
public static IEnumerable<Customers> GetListBy<TKey>(Expression<Func<Customers, bool>> whereLambda, Expression<Func<Customers, TKey>> orderLambda)
{
using (NorthwindEntities db = new NorthwindEntities()) { return db.Customers.Where(whereLambda).OrderBy(orderLambda).ToList(); } }
常見分頁
/// <summary>
/// 分頁查詢
/// </summary>
/// <param name="pageIndex">頁碼</param>
/// <param name="pageSize">頁容量</param>
/// <param name="whereLambda">條件 lambda表達式</param>
/// <param name="orderBy">排序 lambda表達式</param>
/// <returns></returns>
public static List<Customers> GetPagedList<TKey>(int pageIndex, int pageSize, Expression<Func<Customers, bool>> whereLambda,
Expression<Func<Customers, TKey>> orderBy) { using (NorthwindEntities db = new NorthwindEntities()) { // 分頁時一定注意: Skip 之前一定要 OrderBy return db.Customers.Where(whereLambda).OrderBy(orderBy).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); } }
調用:
var a = GetListBy<string>((p)=> p.CustomerID == "11", (q) => q.ContactName);
IQueryable<Orders> or = db.Orders.Where(u=>u.CustomerID=="11").Take(1);
List<Orders> aa = or.ToList();