LinQ是我们常用的技术之一。因为我们绕不开的要对数据进行一系列的调整,如 排序、 条件筛选、求和、分组、多表联接 等等。

lambda则是我们常用的语法糖,配合linq使用天衣无缝,不知不觉就用上了,主要还是看着代码简洁,逼格够高。。。

接下来我们就来看看常用的有哪些

先来点基础数据

  
    //用户类
   public class User
    {
      [DataMember]
        public int ID { get; set; }
       [DataMember]
        public string Name { get; set; }
       [DataMember]
        public string Address { get; set; }
       [DataMember]
        public string Phone { get; set; }
       [DataMember]
        public string Sex { get; set; }

        [DataMember]
        public int Age { get; set; }
        [DataMember]
        public int SchID { get; set; }
    }
 /// <summary>
    /// 学校类
    /// </summary>
    internal class School {
        public int SchID { get; set; }
        public string SchName { get; set; }
       public School(){}
       public School(int id,string name)
       {
           SchID = id;
           SchName = name;
       }
    }
    /// <summary>
    /// 公司类
    /// </summary>
    internal class Company {
        public string Name { get; set; }
       public List<User> Users { get; set; }
       public Company() { }
       public Company(string name, List<User> list)
       {
           Name = name;
           Users = list;
       }
    }

接下来初始化点测试数据

   User user1 = new User()
            {
                ID = ,
                Name = "张一",
                Address = "上海市某某区",
                Phone = ",
                Age = ,
                Sex = "男",
                SchID=
            };
            User user2 = new User()
            {
                ID = ,
                Name = "李小二",
                Address = "上海市某某区",
                Phone = ",
                Age = ,
                Sex = "女",
                SchID =
            };
            User user3 = new User()
            {
                ID = ,
                Name = "张三",
                Address = "上海市某某区",
                Phone = ",
                Age = ,
                Sex = "男",
                SchID =
            };
            User user4 = new User()
            {
                ID = ,
                Name = "李四",
                Address = "上海市某某区",
                Phone = ",
                Age = ,
                Sex = "男",
                SchID =
            };
            List<User> userlist = ) { user1, user2, user3, user4 };

List<School> Schlist = new List<School>() {
new School(1,"武汉大学"),new School(2,"华中科技大学"),new School(3,"华中师范大学")
};

统计(求和)Sum


  //求和
            ; }).Sum(a=>a.ID);
            Console.WriteLine(sum);
//另一种写法
  sum =( select a.ID ).Sum();
            Console.WriteLine(sum);

IEnumerable.Where()方法里面的参数数委托类型Func<TSource, bool> 前面为参数 最后面一个为返回值



求最大最小值 Max Min

  //求最大值
            var max = userlist.Max(a => a.ID);
            Console.WriteLine(max);
            //最小值
            var min = userlist.Min(a => a.ID);
            Console.WriteLine(min);

循环 ForEach

  //循环输出
            userlist.ForEach(a =>
            {
                )
                {
                    Console.WriteLine(a.ID);
                }

            });

条件筛选 where

  //筛选
            ).Single();
            //筛选所有男性用户
            var templist = userlist.Where(a => a.Sex == "男").ToList();

排序

 //排序  根据ID逆序
            templist = userlist.OrderByDescending(a => a.ID).ToList();
            //升序
            templist = userlist.OrderBy(a => a.ID).ToList();

分组 ToLookup 和 GroupBy

 //分组
           var lookup = userlist.ToLookup(a => a.Sex);
           foreach (var item in lookup)
           {
               Console.WriteLine(item.Key);
               foreach (var sub in item)
               {
                   Console.WriteLine("\t\t"+sub.Name+" "+sub.Age);
               }
           }
            //另一种
         var dic =  userlist.GroupBy(a => a.Sex);
         foreach (var item in dic)
           {
               Console.WriteLine(item.Key);
               foreach (var sub in item)
               {
                   Console.WriteLine("\t\t" + sub.Name + " " + sub.Age);
               }
           }
           

联接 (这里只展示内联接)Join

  //联接
         var temp = from usertemp in userlist join sch in Schlist on usertemp.SchID equals sch.SchID
                    select new { Id = usertemp.ID, Name = usertemp.Name, Age = usertemp.Age,Schname=sch.SchName };

返回的匿名类,也可以指点实体类

类型查找 OfType

类型查找很少用到 因为我们都是用的泛型,不过这里还是列出来看看

 //类型查找
            List<,,Name="xx"}};

            IEnumerable<string> query1 = objlist.OfType<string>();

            foreach (string fruit in query1)
            {
                Console.WriteLine(fruit);
            }

可以看到把2个字符串类型给查找出来了

查找深层嵌套 SelectMany

selectMany很少人用也比较少人知道,它可以避免多层嵌套循环 其使用场景还是挺多的,见下代码

//查找深层嵌套
            //初始化数据

            Company ChinaMobile = new Company("中国移动",userlist);
            Company ChinaUnicom = new Company("中国联通", userlist);
            List<Company> companylist = new List<Company>() { ChinaMobile, ChinaUnicom };
            //找出2个公司所有女性成员
          var selectlist =  companylist.SelectMany(a => a.Users).Where(b => b.Sex == "女");
          foreach (var item in selectlist)
          {
              Console.WriteLine(item.Name+":"+item.Sex);
          }

这里可以看到 给出的数据源都是同一个list集合 然后我们看每个集合中只有一个女性成员

正常情况下要想取得这数据的话 要经过2层嵌套循环

 foreach (Company c in companylist)
          {

           foreach (var item in c.Users)
              {
                  if (item.Sex == "女")
                  {
                      Console.WriteLine(item.Name + ":" + item.Sex);
                  }
              }
          }

C#知识体系(一) --- 常用的LInq 与lambda表达式的更多相关文章

  1. LInq 与lambda表达式

    LInq 与lambda表达式 LinQ是我们常用的技术之一.因为我们绕不开的要对数据进行一系列的调整,如 排序. 条件筛选.求和.分组.多表联接 等等. lambda则是我们常用的语法糖,配合lin ...

  2. 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象

    本文需要对C#里的LINQ.Lambda 表达式 .委托有一定了解. 在工作中,经常遇到需要对比两个集合的场景,如: 页面集合数据修改,需要保存到数据库 全量同步上游数据到本系统数据库 在这些场景中, ...

  3. SQL、Linq和Lambda表达式 的关系

    首先说说这三者完全是三种不同的东西,SQL是结构化查询语言(Structured Query Language)简称,这大家再熟悉不过了,下面主要介绍LINQ和Lambda表达式的基本概念以及同一查询 ...

  4. c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)

    c#封装DBHelper类   public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...

  5. 动态LINQ(Lambda表达式)构建

    using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...

  6. android项目架构 -----Android 知识体系与常用第三方框架

    好东西值得分享 ,这是网络上总结的一些开源的东西直接就拿过来了  .... Android通用流行框架大全 先把这张图放在这 ,先来谈一谈项目结构 .我喜欢将东西按模块来划分: 都知道module . ...

  7. Linq之Lambda表达式初步认识

    目录 写在前面 匿名方法 一个例子 Lambda 定义 一个例子 总结 参考文章 写在前面 元旦三天在家闲着无事,就看了看Linq的相关内容,也准备系统的学习一下,作为学习Linq的前奏,还是先得说说 ...

  8. Linq、Lambda表达式详细总结(转)

    (一)输入参数 在Lambda表达式中,输入参数是Lambda运算符的 左边部分.它包含参数的数量可以为0.1或者多个.只有当输入参数为1时,Lambda表达式左边的一对小括弧才可以省略.输入参数的数 ...

  9. LINQ和Lambda表达式

    前言 前段时间接触了一种新的表达式,但是不知道这个是什么意思,所以就先站在巨人的肩膀用了,现在听师哥说这种写法是Lambda表达式.我一直以为,这个Lambda表达式和LINQ查询有异曲同工之妙,可惜 ...

随机推荐

  1. SQL Server中Text和varchar(max)数据类型区别

    SQL Server中Text和varchar(max)数据类型区别   以前只知道text和image是可能被SQL Server淘汰的数据类型,但具体原因不太清楚,今天读书的时候发现了text与v ...

  2. 通过php下载文件并重命名

    $filename = dirname(__FILE__) . '/oldfilename.jpg'; $out_filename = 'newfilename.jpg'; if( ! file_ex ...

  3. chrome (failed) net::ERR_INCOMPLETE_CHUNKED_ENCODING ashx 加载图片

    chrome (failed) net::ERR_INCOMPLETE_CHUNKED_ENCODING   ashx文件加载图片的方法,发现在chrome浏览器里面出了异常: (failed) ne ...

  4. .NET的面向对象

    一.继承 1.C#中的继承规则 继承是可传递的 派生类是对基类的扩展 构造函数和析构函数不能被继承 派生类可以覆盖已继承的成员 派生类只能从一个类中继承,可以通过接口来实现多重继承 类可以定义虚属性. ...

  5. 获取下拉框的文本值和value值

    http://www.cnblogs.com/djgs/p/3691979.html?utm_source=tuicool&utm_medium=referral 现在有一个Id为AreaId ...

  6. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(三)

    前言 在上一篇中,我们依靠着EasyUI强大的前端布局特性把前端登录界面和主界面给搭建完成了.这一篇我们就要尝试着把整个解决方案部署到云端呢,也就是Visual Studio Online(TFVC) ...

  7. Sql 获取向上取整、向下取整、四舍五入取整的实例

    [四舍五入取整截取] select round(54.56,0) [向下取整截取] SELECT FLOOR(54.56) [向上取整截取]  SELECT   CEILING(13.15) --MS ...

  8. C++ 类、构造析构、深拷贝

    1st,感性理解类的思想,就是把数据和对数据的操作打包在一块儿,设计类的时候要 想好数据部分和 要进行的操作.以下是时间类的示意,时间包含时分秒,Time为构造函数,该类支持的操作就是设置时间和读取时 ...

  9. ROS语音交互(三)科大讯飞语音在ROS平台下使用

    以上节tts语音输出为例 下载sdk链接:http://www.xfyun.cn/sdk/dispatcher 1.下载SDK,解压: 2.在ROS工作空间下创建一个Package: catkin_c ...

  10. win7 64 位 tomcat 定时重启脚本

    添加进任务计划即可 net stop "scm"                                           [停止服务] rd /s /q D:\tomc ...