List按照某个字段排序
/// <summary>
/// 按照某个字段排序
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <param name="sortfield">需要排序的字段</param>
/// <param name="IsDesc">倒序还是顺序</param>
/// <returns></returns>
public static List<T> OrderByField<T>(this List<T> list, string sortfield, bool IsDesc)
{
var Queryable = list.AsQueryable();
var p = Expression.Parameter(typeof(T), "p");
var x = Expression.Lambda(Expression.Property(p, sortfield), p);
return Queryable.Provider.CreateQuery<T>(
Expression.Call(typeof(Queryable),
IsDesc ? "OrderByDescending" : "OrderBy",
new Type[] { Queryable.ElementType, x.Body.Type },
Queryable.Expression,
x)).ToList();
}
代码已贴上,调用的时候直接使用list.OrderByField(“需要排序的字段”,true);
例如
List<Res_Signal> list = new List<Res_Signal>();
list = list.OrderByField("ProfitRate", true).ToList();
list = list.OrderByField("Intro", true).ToList();
最后给上 Res_Signal 类
[Serializable]
public class Res_Signal
{
/// <summary>
/// 交易账号ID
/// </summary>
public Guid TradeAccountId { get; set; }
/// <summary>
/// 交易账号简介
/// </summary>
public String Intro { get; set; }
/// <summary>
/// 交易账号昵称
/// </summary>
public String Nickname { get; set; }
/// <summary>
/// 订阅限制值
/// </summary>
public Int32 SubscribeLimit { get; set; }
/// <summary>
/// 订阅模式 目前都是免费 0免费 1收费
/// </summary>
public Int32 SubscribeMode { get; set; }
/// <summary>
/// 订阅模式名称
/// </summary>
public String SubscribeMode_Des { get; set; }
/// <summary>
/// 平台名称
/// </summary>
public String Name { get; set; }
/// <summary>
/// 头像
/// </summary>
public String HeadImg { get; set; }
/// <summary>
/// 用户昵称
/// </summary>
public String UserNickname { get; set; }
/// <summary>
/// 订阅人数
/// </summary>
public Int32 SubscribeCount { get; set; }
/// <summary>
/// 平台图片
/// </summary>
public String Img { get; set; }
/// <summary>
/// 收益率
/// </summary>
public decimal ProfitRate { get; set; }
/// <summary>
/// 总收益
/// </summary>
public decimal ProfitLossAmount { get; set; }
}
不用每次判断 传进来的字段跟需要排序的字段 进行对比,一个方法搞定。