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


      

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

      

  • 相关阅读:
    ThingJS之聚光灯,js开发+控制面板轻松搭
    ThingJS不到50行代码就轻松开发拾取功能
    ThingJS:3D交互技术简化第一人称行走模式
    ThingJS:3D地图开发组件更新啦!
    ThingJS教你怎么用拖拽的方式变身热力图
    天空盒结合ThingJS开发平台,会碰撞出什么火花呢
    ThingJS中支持引用css样式并使用js语法开发
    ThingJS基于CMAP组件融合高德地图web API
    ThingJS:让可视化技术成为高效城市管理的好帮手
    SpringBoot整合Filter
  • 原文地址:https://www.cnblogs.com/FourLeafCloverZc/p/4138484.html
Copyright © 2020-2023  润新知