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 类 --- ...
随机推荐
- iOS客户端的在线安装和更新——针对ADHoc证书
这篇文章纯给自己留个备份,所以对AdHoc证书内部分发和对iOS客户端开发不了解的请直接无视. 一般在iOS游戏或应用开发过程中,正式发布到App Store之前,都需要内部的测试,客户端的安装是个不 ...
- SDN论坛看到BW的问题及相关解答
SDN论坛看到BW的问题及相关解答 链接: http://blog.sina.com.cn/s/blog_5c58e3c70100r1ou.html 现在有一个 QUERY 运行十分慢 , 所以我想在 ...
- 很好的一篇讲LTP在编解码中的作用的文章
原文链接 LONG-TERM PREDICTION by: Adit Aviv Kfir Grichman introduction: The speech signal has been ...
- iOS开发——项目实战总结&关于随机量
关于随机量 rand 是一个标准的 C 函数. random 是定义为 POSIX 标准的一部分. arc4random 是在 BSD 和派生平台. 随机数 arc4random_uniform(N) ...
- shell编程总结
一.学习 shell脚本之前的基础知识 [linux shell中的特殊符号] 1. * :代表零个或多个字符或数字. test后面可以没有任何字符,也可以有多个字符,总之有或没有都能匹配出来. 2. ...
- ctex moderncv版本更新--用latex写一个漂亮的简历
我的电脑是win7系统32位,ctex版本是v2.9.2.164 full(http://www.ctex.org/CTeXDownload) 一直不太清楚moderncv里面类似\cventry这种 ...
- Color Me Less
Color Me Less Time Limit: 2 Seconds Memory Limit: 65536 KB Problem A color reduction is a mappi ...
- Android样式的开发:drawable汇总篇
Android有很多种drawable类型,除了前几篇详细讲解的shape.selector.layer-list,还有上一篇提到的color.bitmap.clip.scale.inset.tran ...
- zepto - toggleClass
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- MyBatis知多少(9)不同类型的数据库
并非所有的数据库都如此复杂,需要使用昂贵的数据库管理系统以及企业级的硬件.一些数 据库其实非常小,足以运行在一台老式的PC机上.所有的数据库都是不一样的.它们有各自不 同的需求和不同的挑战.iBATI ...