public class StudentCardSortHelper<T>
{
  //itemName 要排序的字段名
public static List<StudentCard> SortByCardItem(string itemName, SortOrder sortOrder, List<StudentCard> ListItemData)
{ List<KeyValueData<T>> sd = new List<KeyValueData<T>>();
List<StudentCard> returnList = new List<StudentCard>();
for (int i = ; i < ListItemData.Count; i++)
{
var v = ListItemData[i].StudentCardItems.Find(c => c.Name.Equals(itemName));
if (typeof(T)==typeof(int))
{
object obj = String.IsNullOrEmpty(v.Text)?int.MinValue:Convert.ToInt32(v.Text);
sd.Add(new KeyValueData<T>((T)obj, ListItemData[i]));
}
else
{ object obj = v.Text;
sd.Add(new KeyValueData<T>((T)obj, ListItemData[i]));
}
} if (sortOrder == SortOrder.Ascending)//升序
{
List<KeyValueData<T>> list = sd.OrderBy(c => c.key).ToList<KeyValueData<T>>() ;
foreach (var item in list)
{
returnList.Add(item.StudentCard);
}
}
else//降序
{
List<KeyValueData<T>> list = sd.OrderByDescending(c => c.key).ToList<KeyValueData<T>>();
foreach (var item in list)
{
returnList.Add(item.StudentCard);
}
}
ListItemData = returnList;
return ListItemData; }
//key可重复
public class KeyValueData<T>
{
public T key;
public StudentCard StudentCard; public KeyValueData(T key, StudentCard StudentCard)
{
this.key = key;
this.StudentCard = StudentCard;
} }
}

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

if (v.ItemDataType == DataType.TYPE_NUMBER)
{
ListItemData = StudentCardSortHelper<int>.SortByCardItem(itemName, sortOrder,ListItemData);
}
else
{
ListItemData = StudentCardSortHelper<String>.SortByCardItem(itemName,sortOrder, ListItemData);
}

以下是各个类型定义

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

字段个数是动态的。

public class StudentCard
{
  public List<CardItem> StudentCardItems { get; set; } = new List<CardItem>();
}

动态字段列表实现及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. 【BZOJ5308】[ZJOI2018]胖(模拟,ST表,二分)

    [BZOJ5308][ZJOI2018]胖(模拟,ST表,二分) 题面 BZOJ 洛谷 题解 首先发现每条\(0\)出发的边都一定会更新到底下的一段区间的点. 考虑存在一条\(0\rightarrow ...

  2. hdu 3790 最短路问题 (spfa练手)

    Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的.   Inp ...

  3. nio再学习之通道channel

    通道(Channel):用于在数据传输过程中,进行输入输出的通道,其与(流)Stream不一样,流是单向的,在BIO中我们分为输入流,输出流,但是在通道中其又具有读的功能也具有写的功能或者两者同时进行 ...

  4. HDU3032 Nim or not Nim?

    解:使用sg函数打表发现规律,然后暴力异或起来即可. #include <bits/stdc++.h> typedef long long LL; ; int a[N]; inline L ...

  5. 软件在 win7 上运行时显示乱码

    一个用户反应后,我当时就蒙圈了,因为之前从未遇到过: 百度一下后,发现用户的这种情况比较特殊,从表面上看,[控制面板]和[注册表]相关项设置都正常,为什么还显示乱码呢? 到最后一步如果已经是(简体,中 ...

  6. Summary of Java basics review data

    1.标识符      用于命名程序的对象,如方法名,变量名,规则是: a.大小写敏感 b.由英文字符,文字字符,美元符号,下划线和数字组成,但不能以数字开头 c.不能是关键字 2.%:求余运算符    ...

  7. plink: 等位型计数(allele count)

    对genotype的等位型进行计数,需要用到以下参数: --freq Allele frequencies--counts Modifies --freq to report actual allel ...

  8. 【译】4. Java反射——字段

    原文地址:http://tutorials.jenkov.com/java-reflection/fields.html ======================================= ...

  9. 第十一节,全连接网络中的优化技巧-过拟合、正则化,dropout、退化学习率等

    随着科研人员在使用神经网络训练时不断的尝试,为我们留下了很多有用的技巧,合理的运用这些技巧可以使自己的模型得到更好的拟合效果. 一 利用异或数据集演示过拟合 全连接网络虽然在拟合问题上比较强大,但太强 ...

  10. java8 List<对象> 转 Set、Map(高级)

    实体类 public class Student { private int id; private String name; private String score; private int cl ...