使用linq排序,想改进下,求指教

xcchcaptain2 2012-11-07 09:53:46

/// <summary>
/// 对数据源进行排序
/// </summary>
/// <param name="pStudentInfoList">需要排序的数据源</param>
/// <param name="pSortExpression">排序字段</param>
/// <param name="pSortDeriction">排序的方向</param>
/// <returns>StudentInfo类型的list</returns>
public static List<StudentInfo> GetListSorted(List<StudentInfo> pStudentInfoList, SortKeys pSortExpression, SortDeriction pSortDeriction)
{
List<StudentInfo> ds = new List<StudentInfo>();
if (pSortDeriction == SortDeriction.DESC)
{
switch (pSortExpression)
{
case SortKeys.StudentId:
ds = pStudentInfoList.OrderByDescending(studentinfo => studentinfo.StudentId).ToList<StudentInfo>();
break;
case SortKeys.StudentName:
ds = pStudentInfoList.OrderByDescending(studentinfo => studentinfo.StudentName).ToList();
break;
case SortKeys.Birthday:
ds = pStudentInfoList.OrderByDescending(studentinfo => studentinfo.Birthday).ToList();
break;
case SortKeys.Sex:
ds = pStudentInfoList.OrderByDescending(studentinfo => studentinfo.Sex).ToList();
break;
}
}
else if (pSortDeriction == SortDeriction.ASC)
{
switch (pSortExpression)
{
case SortKeys.StudentId:
ds = pStudentInfoList.OrderBy(studentinfo => studentinfo.StudentId).ToList<StudentInfo>();
break;
case SortKeys.StudentName:
ds = pStudentInfoList.OrderBy(studentinfo => studentinfo.StudentName).ToList();
break;
case SortKeys.Birthday:
ds = pStudentInfoList.OrderBy(studentinfo => studentinfo.Birthday).ToList();
break;
case SortKeys.Sex:
ds = pStudentInfoList.OrderBy(studentinfo => studentinfo.Sex).ToList();
break;
}
}
else
{
}
return ds;
}

这里的sortExpression是排序的字段,封装成了一个枚举
使用了额linq排序,但是还是使用了分支语句和判断语句
想让该方法更加通用,打算从 ds = pStudentInfoList.OrderByDescending(studentinfo => studentinfo.Sex).ToList();
里面的条件表达式入手,请问这样可行吗,如果可行,按个匿名函数该使用什么手段去传入参数,或者使用显式定义的函数可以吗??
...全文
112 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xcchcaptain2 2012-11-08
  • 打赏
  • 举报
回复
引用 2 楼 q107770540 的回复:
反射或用dynmaic linq 参考: http://blog.csdn.net/q107770540/article/details/6133484 Dynamic LINQ :http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-librar……
正是我要找的,非常感谢
xcchcaptain2 2012-11-08
  • 打赏
  • 举报
回复
q107770540 2012-11-07
  • 打赏
  • 举报
回复
反射或用dynmaic linq 参考: http://blog.csdn.net/q107770540/article/details/6133484 Dynamic LINQ :http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
devmiao 2012-11-07
  • 打赏
  • 举报
回复
public static List<StudentInfo> GetListSorted(List<StudentInfo> pStudentInfoList, Expression<Func<StudentInfo, ICompareable> orderfunc, SortDeriction pSortDeriction) { if (pSortDeriction == SortDeriction.DESC) return pStudentInfoList.OrderByDescending(x => orderfunc(x)).ToList(); else return pStudentInfoList.OrderBy(x => orderfunc(x)).ToList(); }

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧