C#如何按任何属性

时间:2018-05-25 12:13:09

标签: c# linq sorting

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 个答案:

答案 0 :(得分:3)

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

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

这里有完整的教程

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

另一个解决方案是让方法接受Expression class

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);
}

答案 1 :(得分:-2)

像:

list.OrderBy(x =&gt; x.property);

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