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,这样可以轻松完成吗?
答案 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)