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

C#如何按任何属性对对象列表进行排序,c#,linq,sorting,C#,Linq,Sorting,此类被设置为listview的源,下面传入函数的sortExpression参数是排序顺序为“IntField ASC”“IntField DESC”“StringField ASC”“StringField DESC”的属性名 public class SortExample { public int IntField {get; set;} public string StringField {get; set;} public DateTime DateField {get

此类被设置为listview的源,下面传入函数的sortExpression参数是排序顺序为“IntField ASC”“IntField DESC”“StringField ASC”“StringField DESC”的属性名

public class SortExample
{
  public int IntField {get; set;}

  public string StringField {get; set;}

  public DateTime DateField {get; set;}
}
public void sortexamplethod(string-sortExpression)
{
列表=新列表();
list.OrderBy(sortExpression);
}
实现这一点的唯一方法是为LINQ中的每个属性或某些东西编写一个比较器,这样做很容易吗?

类似于:

OrderBy(x=>x.property)


若要执行所需操作,可以使用LINQ动态查询库,该库允许您将
字符串
传递给您的
OrderBy

例如:
var result=list.OrderBy(“intField asc”)

这里有完整的教程

另一个解决方案是使方法接受
表达式

public void SortExampleMethod(string sortExpression)
{
   List<SortExample> list = new  List<SortExample>();
   list.OrderBy(sortExpression);
}
public void排序(表达式orderByExpression,bool升序)
{
列表=新列表();
if(升序)
{
list.OrderBy(orderByExpression);
}
其他的
list.orderByDescending(orderByExpression);
}

“IntField ASC”“IntField DESC”?这是怎么回事?这些代码甚至都不编译。你可以为任何属性动态构造表达式。我想你正在寻找类似于
list.OrderBy(x=>x.IntField)的东西。然后通过降序(x=>x.StringField)
,但是你的问题太糟糕了,很难猜到你想要什么。看看这个:哦,天哪!努力解释他将如何有效地使用它。你好,丹尼,下次你发布答案时,给他提供理由和指导,让他可以遵循。谢谢!我的解决方案是对“list.AsQueryable().OrderBy(sortExpression.ToList()”的一个小小的修改
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);
}