动态字段列表实现及List<T>排序
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>排序的更多相关文章
- 一行代码调用实现带字段选取+条件判断+排序+分页功能的增强ORM框架
问题:3行代码 PDF.NET是一个开源的数据开发框架,它的特点是简单.轻量.快速,易上手,而且是一个注释完善的国产开发框架,受到不少朋友的欢迎,也在我们公司的项目中多次使用.但是,PDF.NET比起 ...
- arclist底层模板字段,可以调用的字段列表
arclist底层模板字段,可以调用的字段列表 用DedeCMS做站,arclist是用得最多的标签,因为他是调用文章的基本标签,功能也非常强大,他的底层字段比较多,我们平时使用还没有用到一半,但 ...
- 【Excle数据透视】如何升序排列字段列表中的字段
数据透视表创建完毕,那么如何将字段列表中的字段修改为升序排列呢? 解决方案 更改"字段列表"为按"升序"排列 步骤 单击数据透视表任意单元格→右键单击→数据透视 ...
- MongoDB(六):选择字段、限制记录数、排序记录
1. 选择字段 在MongoDB中,选择字段又叫投影,表示仅选择所需要字段的数据,而不是选择整个文档字段的数据.如果某个文档有5个字段,但只要显示3个字段,那么就只选择3个字段吧,这样做是非常有好处的 ...
- [Oracle] SQL*Loader 详细使用教程(4)- 字段列表
在上一篇中我们介绍了SQL*Loader中最重要的文件——控制文件,而本篇要介绍控制文件中最重要的部分——字段列表,字段列表的作用是把数据文件中的记录和数据库中表的列对应起来,下面是字段列表的一个例子 ...
- jquery动态添加列表后样式失效解决方式
最近在做一个通讯录,使用jquery mobile方式来做,在动态添加列表后,listview原有的样式失效,折腾一会,找出解决办法.代码如下. <%@ page language=" ...
- mybatis操作动态表+动态字段+存储过程
存储过程 statementType="CALLABLE" <!-- 计算金额存储过程--> <update id="getCalcDistributo ...
- solr 通过【配置、多值字段、动态字段】来解决文本表达式查询精确到句子的问题
一.Solr Multivalue field属性positionIncrementGap理解 分类:Lucene 2014-01-22 10:39阅读(3596)评论(0) 参考:http://ro ...
- AngularJS学习笔记(2)——与用户交互的动态清单列表
与用户交互的动态清单列表 以我之前写的一个清单列表页面作为例子(MVC模式的清单列表效果),优化前代码如下: <!DOCTYPE html> <html ng-app="t ...
随机推荐
- Codeforces | CF1041F 【Ray in the tube】
昨天晚上全机房集体开\(Div2\),因为人傻挂两次\(B\)题的我开场就\(rank2000+\dots qwq\)于是慌乱之中的我就开始胡乱看题(口胡),于是看了\(F\dots\)(全机房似乎也 ...
- ELK部署详解--logstash
logstash.yml # Settings file in YAML## Settings can be specified either in hierarchical form, e.g.:# ...
- Spring 整合 Hibernate 时启用二级缓存实例详解
写在前面: 1. 本例使用 Hibernate3 + Spring3: 2. 本例的查询使用了 HibernateTemplate: 1. 导入 ehcache-x.x.x.jar 包: 2. 在 a ...
- 洛谷P4319 变化的道路
题意:给定图,每条边都有一段存在时间.求每段时间的最小生成树. 解:动态MST什么毒瘤...洛谷上还是蓝题... 线段树分治 + lct维护最小生成树. 对时间开线段树,每条边的存在时间在上面会对应到 ...
- 利用SHAPEIT将vcf文件进行基因型(genotype)定相(phasing):查看两个突变是否来源于同一条链(染色体或父本或母本),two mutations carried by the same read
首先,下载SHAPEIT. 按照里面的步骤安装完后,将vcf文件进行基因型定相,分四步走. 第一步,将vcf文件转化为plink二进制文件(.bed, .bim, .fam). 这一步需要用到GATK ...
- 汇编 gdb调试
as -g --32 -o hello.o hello.s ld -m elf_i386 -o hello hello.o gdb hello
- 自定义QMenu
参考: http://blog.csdn.net/qq1623803207/article/details/77449884 http://blog.sina.com.cn/s/blog_a6fb6c ...
- Eclipse搭建SpringBoot之HelloWorld
你的eclipse需要先安装 Spring Tool Suite™ 第一种方法(不建议,之所以贴上是因为探索的过程) 首先新建Maven工程 勾选第一个按钮,第三个是选择working set ,你可 ...
- js 各种事件 如:点击事件、失去焦点、键盘事件等
事件驱动: 我们点击按钮 按钮去掉用相应的方法. demo: <input type="button" v ...
- mariadb-5.5安装
mariadb-5.5 Windows10安装 1.官网下载:https://downloads.mariadb.org/ 2.解压mariadb-5.5.58-winx64.zip,目录C:\mar ...