Linq之Lambda表达式
一 什么是Lambda?
“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。
二 简单的Lambda例子。
1 首先创建一个实体对象类并赋值。
public class Person
{
public int PId { get; set; } //自增ID public string Name { get; set; } public int Age { get; set; } public int JobId { get; set; }
} List<Person> pA = new List<Person>();
pA.Add(new Person() { PId = , Name = "张三", Age = , JobId = });
pA.Add(new Person() { PId = , Name = "小红", Age = , JobId = });
pA.Add(new Person() { PId = , Name = "王武", Age = , JobId = });
pA.Add(new Person() { PId = , Name = "小梅", Age = , JobId = });
pA.Add(new Person() { PId = , Name = "小李", Age = , JobId = }); public class Job
{
public int JobId { get; set; } //自增ID
public string JobName { get; set; }
public int WorkAge { get; set; }
} List<Job> jB = new List<Job>();
jB.Add(new Job() { JobId = , JobName = "制造业", WorkAge = });
jB.Add(new Job() { JobId = , JobName = "IT行业", WorkAge = });
jB.Add(new Job() { JobId = , JobName = "建筑业", WorkAge = });
jB.Add(new Job() { JobId = , JobName = "金融业", WorkAge = });
2 查询所有人:
var result = pA.Select(k => k).ToList();
3.where条件(年龄大于18的):
var result1 = pA.Where(k => k.Age > ).ToList(); //where
var result2 = pA.Where(k => k.Age > && k.JobId== ).ToList(); // and
var result3 = pA.Where(k => k.Age > || k.JobId == ).ToList(); // or
4.group by(一个字段和多个字段)
//单个字段
var result4 = pA.Where(k => k.Age > ).GroupBy(j => j.JobId).Select(l => l.Key).ToList();
//多个字段
var result5 = pA.Where(k => k.Age > )
.GroupBy(a => new Person{ PId=a.PId , Name=a.Name, Age=a.Age, JobId=a.JobId })
.Select(a => a.Key).ToList();
4.1 Distinct(单列去重)
//单列去重
var result13 = pA.Select(k => k.JobId).Distinct();
5.order by(排序,动态排序)
var result6 = pA.Where(k => k.Age > )
.OrderBy(k => k.Age).ToList(); // asc var result7 = pA.Where(k => k.Age > )
.OrderByDescending(k => k.Age).ToList(); // desc
//先按年龄倒序,在按职业正序,在按名称倒序。
var result8 = pA.Where(k => k.Age > )
.OrderByDescending(k => k.Age).ThenBy(k => k.JobId).ThenByDescending(k => k.Name).ToList();
//动态排序
var result81 = pA.OrderBy(k => GetPropertyValue(k, "Age")).ToList();
var result82 = pA.OrderBy(k => GetPropertyValue(k, "JobId")).ToList(); private static object GetPropertyValue(object obj, string property)
{
System.Reflection.PropertyInfo propertyInfo = obj.GetType().GetProperty(property);
return propertyInfo.GetValue(obj, null);
}
6 count() (总行数)
var result9 = pA.Where(k => k.Age > ).Count();
7 avg() (平均年龄)
var result10 = pA.Average(k => k.Age);
8 Contains (相当于sql中like)检索名称中有小字:
注意:如果检索的是英文的话,需要大小写转换,因为linq区分大小写!
var result11 = pA.Where(k => k.Name.Contains("小")).ToList();
9 join
var result12 = pA.Join(jB, j => j.JobId, k => k.JobId, (j, k) => new {j.PId,j.Name,j.Age,k.JobName }).ToList();
10 left join (DefaultIfEmpty)
var result13 = pA.Join(jB, j => j.JobId, k => k.JobId, (j, k) => new { j.PId, j.Name, j.Age, k.JobName }).DefaultIfEmpty().ToList();
11 Take (相当于top)
//获取前几条(相当于top)
var result154 = pA.Where(o => o.Age > ).Take().ToList();
转载请注明出处:http://www.cnblogs.com/bkyan/
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 ...
- LINQ使用Lambda表达式选择几列
学习LINQ的Lambda的表达式,尝试从数据集合中,选择其中几列. 创建一个model: source code: namespace Insus.NET.Models { public class ...
- Linq之Lambda表达式初步认识
目录 写在前面 匿名方法 一个例子 Lambda 定义 一个例子 总结 参考文章 写在前面 元旦三天在家闲着无事,就看了看Linq的相关内容,也准备系统的学习一下,作为学习Linq的前奏,还是先得说说 ...
- 【2017-06-01】Linq基础+Lambda表达式实现对数据库的增删改查
一.Linq to sql 类 高集成化的数据库访问技术 使用Linq可以代替之前的Ado.Net.省去了自己敲代码的实体类和数据访问类的大量工作. 实体类: 添加一个Linq to sql 类 -- ...
- Linq基础+Lambda表达式对数据库的增删改及简单查询
一.Linq to sql 类 高集成化的数据库访问技术 使用Linq可以代替之前的Ado.Net,省去了自己敲代码的实体类和数据访问类的大量工作 实体类: 添加一个Linq to sql 类 --- ...
随机推荐
- Android ImageView src与backgroud
在XML中添加ImageView时,有两个可以设置图片的地方,一个是android:src,一个是android:background,这两个的区别: src是图片内容,显示在前面的,backgrou ...
- C# WinForm 技巧十: 开发工具
一.摘要 为了开发效率就应该为这个框架开发一个配套工具.来生成固定格式的代码.工具界面如下: 二.数据库整理篇 添加表主键 修改表说明 修改表字段说明 生成数据库文档 导出数据库里相同的字 ...
- Android Screen Orientation Change (Screen Rotation) Example
原文见: http://techblogon.com/android-screen-orientation-change-rotation-example/#
- 一个winform带你玩转rabbitMQ
源码已放出 https://github.com/dubing/MaoyaRabbit 本章分3部分 一.安装部署初探 二.进阶 三.api相关 安装 部署 初探 先上图 一. 安装部署 下载 rab ...
- juniper 550M訪问自身公网IP回流内部IP
拓扑图示意: 网关设备juniper 550M, untrust 区: 公网地址段22.22.22.22/29 trust区: 内部员工PC地址:172.16.4.x /24 trust区: ...
- Schema Workbench 开发mdx和模式文件
一.前言 安装了saiku之后,每次修改schema文件,非常耗时,每次都要经历若干步骤:修改xml.上传.重启才能生效,并且非常不利于学习和理解MDX和模式文件,踌躇之际,发现了这个工具,十分小巧方 ...
- 用C#制作PDF文件全攻略
用C#制作PDF文件全攻略 目 录 前 言... 3 第一部分 iText的简单应用... 4 第一章 创建一个Document 4 第一步 创建一个Document实例:... 5 第二步 ...
- 判断JavaScript对象为null或者属性为空
http://blog.csdn.net/yiluoak_47/article/details/7766760 首先说下null与undefined区别: 对已声明但未初始化的和未声明的变量执行typ ...
- JAVA 多线程编程之一(基础)
1.原子变量(java.util.concurrent.atomic) 原子状态,变化不会被打断,如 AtomicLong , AtomicInteger 2.内部锁 synchronized 块 ...
- JS基础回顾,小练习(去除字符串空格)
方法1: var str = ' h t m l 5 '; function trim(str) { var reg = /(\s+)/g; var m,s = str; while(m = reg. ...