首页 文章

C#如何按任何属性对对象列表进行排序

提问于
浏览
0
public class SortExample
{
  public int IntField {get; set;}

  public string StringField {get; set;}

  public DateTime DateField {get; set;}
}

此类被设置为listview的源,并且下面函数中传递的sortExpression参数是具有排序顺序的属性名称'IntField ASC''IntField DESC''StringField ASC''StringField DESC'

public void SortExampleMethod(string sortExpression)
{
   List<SortExample> list = new  List<SortExample>();
   list.OrderBy(sortExpression);
}

实现这一点的唯一方法是为LINQ中的每个属性写一个Comparator,这样可以轻松完成吗?

2 回答

  • 3

    像这样的东西:

    list.OrderBy(x => x.property);

    https://msdn.microsoft.com/en-us/library/bb534966.aspx

  • -2

    要做你需要的,你可以使用LINQ动态查询库,它允许你将 string 传递给你的 OrderBy .

    例如: var result = list.OrderBy("intField asc");

    这里完整的教程

    https://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library

    另一种解决方案是使该方法接受 Expression

    public void sort(Expression<Func<TEntity, S>> orderByExpression, bool ascending)
    {
    
    List<SortExample> list = new  List<SortExample>();
    if(ascending)
    {
       list.OrderBy(orderByExpression);
    }
    else
       list.OrderByDescneding(orderByExpression);
    }
    

相关问题