C#基础----Linq之List<T>篇

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

最近有用到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))

{return1;

}elseif((x.Name == y.Name) && (x.Age ==y.Age))

{return0;

}else{return-1;

}

});

1.2 因为最近有做Silverlight的datagrid里面像实现点击任何一列的名称就按照该名称排序,那我们该怎么做呢?可能第一反应是想,为每一个属性写一个排序方法不就得了,其实这样的话无意间增加的代码量了,而且不通用,其实这里可以结合反射来实现.

stringPRopertityName ="Name";

lstPerson= lstPerson.OrderBy(x =>{

PropertyInfo[] proInfos=x.GetType().GetProperties();returnproInfos.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>publicstaticList<Person> GetPage(List<Person> lstPerson,intpageIndex,intPageSize)

{

List<Person> pagePerson =newList<Person>();for(intindex = (pageIndex -1) * PageSize; index < pageIndex * PageSize && index<lstPerson.Count; index++)

{

pagePerson.Add(lstPerson[index]);

}returnpagePerson;

}

2.2,其实linq有skip和take方法,skip表示跳过多少元素,take获取特定个数元素. 看起来代码简洁多了.

publicstaticList<Person> GetPageByLinq(List<Person> lstPerson,intpageIndex,intPageSize)

{returnlstPerson.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);

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航