/// <summary>
/// 根據不同參數動態排序
/// </summary>
/// <param name="condition">Lambda表達式</param>
/// <param name="pageIndex">當前頁</param>
/// <param name="pageSize">一頁條數</param>
/// <param name="total">總條數</param>
/// <param name="propertyName">需要排序的字段名</param>
/// <param name="IsDESC">是否降序</param>
/// <returns></returns>
public static List<CusClass> GetEntity(Expression<Func<Customers_tb, bool>> condition, int pageIndex, int pageSize, out int total,out string message, string propertyName, bool IsDESC)
{
MyETLockContext DbContext = new MyETLockContext();
//條件過濾
var query = DbContext.Set<Customers_tb>().Where(condition);
//創建表達式變量參數
var parameter = Expression.Parameter(typeof(Customers_tb), "cus");
//根據屬性名獲取屬性
var property = typeof(Customers_tb).GetProperty(propertyName);
if (property!=null)
{
//創建一個訪問屬性的表達式
var propertyAccess = Expression.MakeMemberAccess(parameter, property);
var orderByExp = Expression.Lambda(propertyAccess, parameter);
string OrderName = IsDESC ? "OrderByDescending" : "OrderBy";
MethodCallExpression resultExp = Expression.Call(typeof(Queryable), OrderName, new Type[] { typeof(Customers_tb), property.PropertyType }, query.Expression, Expression.Quote(orderByExp));
query = query.Provider.CreateQuery<Customers_tb>(resultExp);
total = query.Count();
message = "成功";
return query.Select(s => new CusClass
{
Id = s.Id,
Name = s.Name,
AgentId = s.AgentId.HasValue ? s.AgentId.Value : 0
})
.Skip((pageIndex - 1) * pageSize)
.Take(pageSize).ToList();
}
else
{
message="字段錯誤";
total = 0;
return null;
}
}
EF 不同參數動態排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.