C#基础----Linq之List<T>篇
2018-06-18 03:03:33来源:未知 阅读 ()
最近有用到List处理排序以及分页的问题.想想还是写一个博客记录一下。以下围绕Person类实现,Person类只有Name和Age两个属性
一.List<T>排序
1.1 List<T>提供了很多排序方法,sort(),Orderby(),OrderByDescending().
lstPerson = lstPerson.OrderByDescending(x=>x.Name).ToList(); //降序 lstPerson = lstPerson.OrderBy(x => x.Age).ToList();//升序 //通过Name和Age升序 lstPerson.Sort((x, y) => { if ((x.Name.CompareTo(y.Name) > 0) || ((x.Name == y.Name) && x.Age > y.Age)) { return 1; } else if ((x.Name == y.Name) && (x.Age == y.Age)) { return 0; } else { return -1; } });
1.2 因为最近有做Silverlight的datagrid里面像实现点击任何一列的名称就按照该名称排序,那我们该怎么做呢?可能第一反应是想,为每一个属性写一个排序方法不就得了,其实这样的话无意间增加的代码量了,而且不通用,其实这里可以结合反射来实现.
string propertityName = "Name"; lstPerson = lstPerson.OrderBy(x => { PropertyInfo[] proInfos = x.GetType().GetProperties(); return proInfos.Where(info => info.Name == propertityName).ToList()[0].GetValue(x); }).ToList();
二.List<T>分页
2.1在Silverlight往往有时候我们会从后台获取很多数据,存放在List<T>,可是因为界面受限制无法完全展示,我们就会想到分页显示,对于分页显示我们基本上第一种想法肯定是通过循环设置每一页的Size,代码如下:
/// <summary> /// 获取单页数据 /// </summary> /// <param name="lstPerson">数据集合</param> /// <param name="pageIndex">页码(默认从1开始)</param> /// <param name="PageSize">每一页的数据行数</param> /// <returns></returns> public static List<Person> GetPage(List<Person> lstPerson, int pageIndex, int PageSize) { List<Person> pagePerson = new List<Person>(); for (int index = (pageIndex - 1) * PageSize; index < pageIndex * PageSize && index<lstPerson.Count; index++) { pagePerson.Add(lstPerson[index]); } return pagePerson; }
2.2,其实linq有skip和take方法,skip表示跳过多少元素,take获取特定个数元素. 看起来代码简洁多了.
public static List<Person> GetPageByLinq(List<Person> lstPerson, int pageIndex, int PageSize) { return lstPerson.Skip((pageIndex - 1) * PageSize).Take(PageSize).ToList(); }
三,List<T>之foreach用法.
2.1 如何我相对List里面的每个对象执行相同操作的话,以前都是通过for循环遍历,其实Linq提供了便捷的Foreach来实现。下面我将对所有的Person年龄+2.
lstPerson.ForEach(x => x.Age= x.Age + 2);
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:接口相关
- 如何0基础学习C/C++? 2020-06-06
- 复习C++语法--基础篇 2020-05-27
- STL之list 2020-04-30
- C++基础 学习笔记六:复合类型之数组 2020-04-25
- C++基础 学习笔记五:重载之运算符重载 2020-04-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash