1. public class StudentCardSortHelper<T>
  2. {
  3.   //itemName 要排序的字段名
  4. public static List<StudentCard> SortByCardItem(string itemName, SortOrder sortOrder, List<StudentCard> ListItemData)
  5. {
  6.  
  7. List<KeyValueData<T>> sd = new List<KeyValueData<T>>();
  8. List<StudentCard> returnList = new List<StudentCard>();
  9. for (int i = ; i < ListItemData.Count; i++)
  10. {
  11. var v = ListItemData[i].StudentCardItems.Find(c => c.Name.Equals(itemName));
  12. if (typeof(T)==typeof(int))
  13. {
  14. object obj = String.IsNullOrEmpty(v.Text)?int.MinValue:Convert.ToInt32(v.Text);
  15. sd.Add(new KeyValueData<T>((T)obj, ListItemData[i]));
  16. }
  17. else
  18. {
  19.  
  20. object obj = v.Text;
  21. sd.Add(new KeyValueData<T>((T)obj, ListItemData[i]));
  22. }
  23. }
  24.  
  25. if (sortOrder == SortOrder.Ascending)//升序
  26. {
  27. List<KeyValueData<T>> list = sd.OrderBy(c => c.key).ToList<KeyValueData<T>>() ;
  28. foreach (var item in list)
  29. {
  30. returnList.Add(item.StudentCard);
  31. }
  32. }
  33. else//降序
  34. {
  35. List<KeyValueData<T>> list = sd.OrderByDescending(c => c.key).ToList<KeyValueData<T>>();
  36. foreach (var item in list)
  37. {
  38. returnList.Add(item.StudentCard);
  39. }
  40. }
  41. ListItemData = returnList;
  42. return ListItemData;
  43.  
  44. }
  45. //key可重复
  46. public class KeyValueData<T>
  47. {
  48. public T key;
  49. public StudentCard StudentCard;
  50.  
  51. public KeyValueData(T key, StudentCard StudentCard)
  52. {
  53. this.key = key;
  54. this.StudentCard = StudentCard;
  55. }
  56.  
  57. }
  58. }

使用方法,其中不同列的原始数据都是string类型,但是年龄之类直接按string排序会出问题,所以改成列类型自动判断,ListItemData为未排序前的学生卡片列表。

  1. if (v.ItemDataType == DataType.TYPE_NUMBER)
  2. {
  3. ListItemData = StudentCardSortHelper<int>.SortByCardItem(itemName, sortOrder,ListItemData);
  4. }
  5. else
  6. {
  7. ListItemData = StudentCardSortHelper<String>.SortByCardItem(itemName,sortOrder, ListItemData);
  8. }

以下是各个类型定义

  1. public enum DataType
  2. {
  3. TYPE_STRING,
  4. TYPE_NUMBER
  5. }
  1. //数据列表
  2. public List<StudentCard> ListItemData = new List<StudentCard>();
  1. public class CardItem
  2. {
  3. private String name;//名称
  4. private String text;//显示文本
  5. private DataType itemDataType;//数据类型
      {..getset..}
  6. }

字段个数是动态的。

  1. public class StudentCard
  2. {
  3.   public List<CardItem> StudentCardItems { get; set; } = new List<CardItem>();
  4. }

动态字段列表实现及List<T>排序的更多相关文章

  1. 一行代码调用实现带字段选取+条件判断+排序+分页功能的增强ORM框架

    问题:3行代码 PDF.NET是一个开源的数据开发框架,它的特点是简单.轻量.快速,易上手,而且是一个注释完善的国产开发框架,受到不少朋友的欢迎,也在我们公司的项目中多次使用.但是,PDF.NET比起 ...

  2. arclist底层模板字段,可以调用的字段列表

    arclist底层模板字段,可以调用的字段列表   用DedeCMS做站,arclist是用得最多的标签,因为他是调用文章的基本标签,功能也非常强大,他的底层字段比较多,我们平时使用还没有用到一半,但 ...

  3. 【Excle数据透视】如何升序排列字段列表中的字段

    数据透视表创建完毕,那么如何将字段列表中的字段修改为升序排列呢? 解决方案 更改"字段列表"为按"升序"排列 步骤 单击数据透视表任意单元格→右键单击→数据透视 ...

  4. MongoDB(六):选择字段、限制记录数、排序记录

    1. 选择字段 在MongoDB中,选择字段又叫投影,表示仅选择所需要字段的数据,而不是选择整个文档字段的数据.如果某个文档有5个字段,但只要显示3个字段,那么就只选择3个字段吧,这样做是非常有好处的 ...

  5. [Oracle] SQL*Loader 详细使用教程(4)- 字段列表

    在上一篇中我们介绍了SQL*Loader中最重要的文件——控制文件,而本篇要介绍控制文件中最重要的部分——字段列表,字段列表的作用是把数据文件中的记录和数据库中表的列对应起来,下面是字段列表的一个例子 ...

  6. jquery动态添加列表后样式失效解决方式

    最近在做一个通讯录,使用jquery mobile方式来做,在动态添加列表后,listview原有的样式失效,折腾一会,找出解决办法.代码如下. <%@ page language=" ...

  7. mybatis操作动态表+动态字段+存储过程

    存储过程 statementType="CALLABLE" <!-- 计算金额存储过程--> <update id="getCalcDistributo ...

  8. solr 通过【配置、多值字段、动态字段】来解决文本表达式查询精确到句子的问题

    一.Solr Multivalue field属性positionIncrementGap理解 分类:Lucene 2014-01-22 10:39阅读(3596)评论(0) 参考:http://ro ...

  9. AngularJS学习笔记(2)——与用户交互的动态清单列表

    与用户交互的动态清单列表 以我之前写的一个清单列表页面作为例子(MVC模式的清单列表效果),优化前代码如下: <!DOCTYPE html> <html ng-app="t ...

随机推荐

  1. js中的arguments用法

    //arguments对象并不是一个数组,但是访问单个参数的方式与访问数组元素的方式相同 function show(){ console.log(arguments); //arguments.pu ...

  2. suoi62 网友跳 (暴搜+dp)

    传送门 sbw太神啦orz 首先N<=20可以直接暴搜 然后玄学剪枝可以过18个点 那么N<=40的时候,就把它拆成两半分别暴搜,再用dp拼起来 对于前半段,设f[i][j]是开始高度为i ...

  3. 单片机的基本构成、工作原理 LET′S TRY“嵌入式编程”: 1 of 6

    单片机的基本构成.工作原理 LET′S TRY“嵌入式编程”: 1 of 6 本连载讲解作为嵌入式系统开发技术人员所必需具备的基础知识.这些基础知识是硬件和软件技术人员都应该掌握的共通技术知识.有了电 ...

  4. Python数据结构之实现队列

    再学习数据结构队列的时候,我不想讲太多!一切言语不如几张图来的实在! 这是第一张图,第二图是讲队列满的情况: 分析了数据结构中的队列是什么之后,我们开始写代码,代码Code如下: #coding:ut ...

  5. springAop 使用@Around,@After等注解时,代码运行两边的问题

    springAop使用@Around,@After等注解时,代码运行两边的问题 将@Component注解删掉就好了

  6. Centos 6.5 安装和使用docker

    基于本人一贯的习惯,关于“某某某是什么”这样的问题,请百度吧,会有更专业的人士,会比我说的更详细更深,这里我只给出本人亲历的安装和使用过程. 1.安装 先检查服务器环境,docker要求操作系统Cen ...

  7. 如何 通过 userAgent 区别微信小程序

    微信内置浏览器: 微信小程序: 有micromessenger是微信内置浏览器,有micromessenger和miniprogram的是微信小程序.  (ios不适用) if(navigator.u ...

  8. JavaScript深入之变量对象

    前言 在上篇<javascript深入之执行上下文栈>中讲到,当javascript代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution ...

  9. postman基于webservice的请求

    以  http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo   为例 1.先理解事例的内容,请求头和响应 ...

  10. Tomcat 启动时 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context}

    在Eclipse 中,启动Tomcat 时,出现: 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting proper ...