C#知识体系(一) --- 常用的LInq 与lambda表达式
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表达式的更多相关文章
- LInq 与lambda表达式
LInq 与lambda表达式 LinQ是我们常用的技术之一.因为我们绕不开的要对数据进行一系列的调整,如 排序. 条件筛选.求和.分组.多表联接 等等. lambda则是我们常用的语法糖,配合lin ...
- 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象
本文需要对C#里的LINQ.Lambda 表达式 .委托有一定了解. 在工作中,经常遇到需要对比两个集合的场景,如: 页面集合数据修改,需要保存到数据库 全量同步上游数据到本系统数据库 在这些场景中, ...
- SQL、Linq和Lambda表达式 的关系
首先说说这三者完全是三种不同的东西,SQL是结构化查询语言(Structured Query Language)简称,这大家再熟悉不过了,下面主要介绍LINQ和Lambda表达式的基本概念以及同一查询 ...
- c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)
c#封装DBHelper类 public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...
- 动态LINQ(Lambda表达式)构建
using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...
- android项目架构 -----Android 知识体系与常用第三方框架
好东西值得分享 ,这是网络上总结的一些开源的东西直接就拿过来了 .... Android通用流行框架大全 先把这张图放在这 ,先来谈一谈项目结构 .我喜欢将东西按模块来划分: 都知道module . ...
- Linq之Lambda表达式初步认识
目录 写在前面 匿名方法 一个例子 Lambda 定义 一个例子 总结 参考文章 写在前面 元旦三天在家闲着无事,就看了看Linq的相关内容,也准备系统的学习一下,作为学习Linq的前奏,还是先得说说 ...
- Linq、Lambda表达式详细总结(转)
(一)输入参数 在Lambda表达式中,输入参数是Lambda运算符的 左边部分.它包含参数的数量可以为0.1或者多个.只有当输入参数为1时,Lambda表达式左边的一对小括弧才可以省略.输入参数的数 ...
- LINQ和Lambda表达式
前言 前段时间接触了一种新的表达式,但是不知道这个是什么意思,所以就先站在巨人的肩膀用了,现在听师哥说这种写法是Lambda表达式.我一直以为,这个Lambda表达式和LINQ查询有异曲同工之妙,可惜 ...
随机推荐
- Calculator(补)
MyGitHub 刚刚开始时确实是连题目都看不懂= =,从第二行的新建类开始,就不知题目所云.所以我的困难比很多同学都要 开始得早一些--从题目第二行开始. 准确的说,当我按照题目要求新建了一个sca ...
- blade and soul zone overview
The world of Blade and Soul, is a vast extension of land containing two continents (the Southern Con ...
- 1千万英国用户被Cryptolocker勒索软件瞄准
英国国家打击犯罪调查局(NCA)发布国家紧急警报,警报一场大规模的垃圾邮件,这些邮件中包含了一款名为CryptoLocker的勒索程序,把目标瞄准了1千万英国的email用户,该程序会加密用户的文档, ...
- μC/OS-Ⅲ系统的源代码文件组织结构
- code of C/C++(2)
初学者学习构造函数和析构函数,面对如何构造的问题,会头大.这里提供了变量(int,double,string),char *,字符数组三个类型的私有成员初始化的方法 //char * 类型的成员,如何 ...
- 用Pyinstaller打包发布exe应用 (转)经测可用
安装Pyinstaller 1 按照习惯,我们使用pip来安装模块.我们一直以来强调,要用最偷懒的方法.写代码的人尤其如此.人生苦短,你要偷懒~ 0Python | 如何用pip安装模块和包 ...
- onethink导出excel
function customer_daochu() { /** * 客户名单导出 * */ $customer = D('WcoaUCustomers'); $data = $customer-&g ...
- codeforces problem 140E New Year Garland
排列组合题 题意 用m种颜色的彩球装点n层的圣诞树.圣诞树的第i层恰由l[i]个彩球串成一行,且同一层内的相邻彩球颜色不同,同时相邻两层所使用彩球的颜色集合不同.求有多少种装点方案,答案对p取模. 只 ...
- 硬件抽象层:HAL
本节我们研究硬件抽象层:HALHAL,它是建立在Linux驱动之上的一套程序库.刚开始介绍了为什么要在Android中加入HAL,目的有三个,一,统一硬件的调用接口.二,解决了GPL版权问题.三,针对 ...
- Dom学习笔记
今天老师出了一道面试题目:取到表单里面的textbox的值,两种方法.知道一种,老师说的什么dom,我竟然不知道. 以前学html的时候,老师也重来没有提到dom的概念.javaScript只是学了一 ...