专栏首页大猪的笔记C#笔记:LinqToObject用法

C#笔记:LinqToObject用法

Linq作为 .net3.5 可以比肩蓝翔挖掘机的重磅产品,当然可以对万事万物进行查询。而不只是查查xml,数据库可以概括的。自然,我们也能用它对List<T> ,甚至简单的数组进行查找。 简单说来,只要是实现了IEnumerable<T>接口的数据结构,我们都能对其使用linq进行查找,而lambda表达式,则是代码简洁易编写的保证。 举例说明。 有类:People。包含两个字段,ID和姓名。ID为一位大写字母加三位数字组成,比如A010。A>B,9>1。即公司最高职位是A999,最低职位是Z001。

 public class People
    {
        public People(string ID, string strName)
        {
            this.ID = ID;
            this.strName = strName;
        }
        public string ID;
        public string strName;             
    }

创建一个List,并添加一些测试数据

List<People> listPeople = new List<People>() {              new People("Z110", "yzh"),

             new People("A050", "zhh"),

             new People("B135", "dhh"),

             new People("C321", "dbb"),

             new People("A111", "dnn"),

             new People("Z111", "myOK")};

例1:查找ID包含A的员工。

 var selectItems = listPeople.Where(o => o.ID.Contains('A'));
 //打印返回的list。          
 selectItems.ToList<People>().ForEach(o => Console.WriteLine(o.ID + " " + o.strName));

.where方法返回的是一个枚举,我们可以使用ToList方法把它转换成相应的数组。 例2:对上面的结果进行公司职位高低排序。

var selectSortItems = selectItems.OrderBy(o => o.ID, mc); //如果是简单的升降排序,我们只需要传入选择器,用默认的系统排序器即可。

这里有些复杂,网上的材料不多。OrderBy函数,传入的是两个参数,一个选择器,一个排序器。选择器我们自然可以使用lambda表达式选择People类中的字段ID。但是,排序器MC我们该如何实现呢?  排序器是一个类的实例,它实现接口IComparer<T>

class MyComparer : IComparer<string>
    {
        /// <summary>
        /// 比较函数具体实现,对x和y的绝对值进行比较。
        /// </summary>
        public int Compare(string x, string y)
        {
            if (!x.Substring(0, 1).Equals(y.Substring(0, 1)))//首先对首字母进行比较。
            {
                return x.CompareTo(y);
            }
            else
            {
                return x.CompareTo(y) * (-1);//若首字母相同,比较数字部分。降序,所以乘以-1
            }
        }
    }

自然 MyComparer mc = new MyComparer(); 利用linq中的orderby,我们可以对任意数据以任意方法进行排序和查找。感觉是很不错的。而且大部分情况下我们不需要自己实现排序器。只用简单的一个lambda式就能完成排序,真呀么真开心。 例子3,对数据进行分页。 这个例子我们必须动用linq中的Skip函数和Take函数。Skip(N)函数会跳过前面N个对象,而Take(N)则会从当前位置选取N个连续的对象。并返回新的枚举。 下面的代码就是将测试数据分成3页。

  int pageSize = 3;
            int pageCount = listPeople.Count % pageSize == 0 ? listPeople.Count / pageSize : listPeople.Count / pageSize + 1;
            for (int i = 1; i <= pageCount; i++)
            {
                var sortList = listPeople.OrderBy(o => o.ID).Skip(pageSize * (i - 1)).Take(3);
                foreach (People p in sortList)
                {
                    Console.WriteLine(p.strName);
                }
                Console.WriteLine("===========================");
            }

例4:查找其他类型 下面这个例子,返回数组中长度大于4的单词的枚举。数组也是一样的可以查的。嘿嘿。

  string[] testArray = { "hello", "world", "my", "baby" };
            var selectItems = from item in testArray
                              where item.Length > 4
                              select item;

等价于:var selectItems = testArray.Where(o => o.Length > 4); 终于弄完了。哈哈。linq真是个好东西啊。 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python笔记:python调用C库

    在python中实现算法性能较差,所以在某些瓶颈处,可以把算法用C语言的实现。编译成动态链接库,再让python调用。

    超级大猪
  • ubuntu设置中文字体

    超级大猪
  • ubuntu关闭时间同步

    虽然System clock synchronized: no,但是时间仍然在同步。因为还要重启一下服务。这一步特别重要。

    超级大猪
  • 【译】《Understanding ECMAScript6》- 第三章-Object

    目录 Object分类 Object字面量扩展 Object.assign() 重复属性 改变原型 super引用 方法 总结 ES6针对Object的改进,旨...

    寒月十八
  • 小甲鱼《零基础学习Python》课后笔记(三十):文件系统——介绍一个高大上的东西

    动动手 0.编写一个程序,统计当前目录下每个文件类型的文件数,程序实现如图:

    小火柴棒
  • leetcode463. Island Perimeter

    用一个二维数组来表示一块岛屿的土地情况,其中1代表土地,0代表海洋。要求计算出岛屿的周长。题目中特别强调了不存在内陆湖的存在,其实是变相的降低了题目的难度。即我...

    眯眯眼的猫头鹰
  • Go:学习笔记兼吐槽(2)

    base:指定进制(2到36) fmt:表示格式:'f'(-ddd.dddd)、'b'(-ddddp±ddd,指数为二进制)、'e'(-d.dddde±dd,十...

    丹枫无迹
  • 四声域名“统一平台”typt.com50000元被秒

    好域名、好市场。四声母这一绝好域名向来是很多投资人参考的米市风向标,一直以来也是备受关注,一些含义好的四声域名高价被秒或交易也不是什么稀奇的事情。近...

    躲在树上的域小名
  • ZPL打印中文信息

      相信各位在实际的项目中,需要开发打条码模块的也会有不少,很多同行肯定也一直觉得斑马打印机很不错,但是ZPL打印中文字符很麻烦。如果购买字体卡,或者通过COD...

    跟着阿笨一起玩NET
  • 我所理解的Remoting(1):Marshaling & Activation[上篇]

    什么是Marshaling &Activation 对任何一项分布式技术(Distributed Technology),比如Remoting,XML Web ...

    蒋金楠

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动