首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-12-25 
使用linq排序,想改进下,求指教/// summary/// 对数据源进行排序/// /summary/// param namepStuden

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

        /// <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();
里面的条件表达式入手,请问这样可行吗,如果可行,按个匿名函数该使用什么手段去传入参数,或者使用显式定义的函数可以吗??
[解决办法]
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();
}
[解决办法]
反射或用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

热点排行