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 类 --- ...
随机推荐
- 利用print2flashsetup.exe文档转swf
通过使用Print2Flash您可以轻松的将您的文档转换成真正的Adobe Flash格式,最好的保证您的内容将实际可见,与其他格式相比,它并不存在查看工具的安装问题. Print2Flash中有一个 ...
- 分享一个漂亮的ASP.NET MVC黑色界面框架
插件应用架构概述 基于LCLFramework插件框架的应用由以下三个部分构成: (1)主程序:针对特定应用环境(Web.WinForm等应用环境),加载启动插件,获取插件入口,运行入口程序. (2) ...
- 99 Lisp Problems 列表处理(P1~P28)
L-99: Ninety-Nine Lisp Problems 列表处理类问题的解答,用Scheme实现,首先定义几个在后续解题中用到的公共过程: ; common procedure (define ...
- friend class
友元函数与友元类. C++中以关键字friend声明友元关系.友元可以访问与其有friend关系的类中的私有成员.友元包括友元函数和友元类. 编辑本段1.友元函数 如果在本类以外的其它地方定义 ...
- IOC容器特性注入第一篇:程序集反射查找
学习kooboo的框架发现它的注入容器方法比较特别,同样是利用MVC的注入点,但它是查找网站下面bin所有的DLL利用反射查找特性找到对应的服务注入到容器. 这样的好处很简单:完全可以不用关心IOC容 ...
- MassTransit RabbitMQ 参考文档
Autofac http://docs.autofac.org/en/latest/lifetime/startup.html RabbitMQ http://www.rabbitmq.com/dot ...
- bootstrap fileinput 文件上传工具
这是我上传的第二个plugin 首先第一点就是因为这个好看 符合bootstrap的界面风格 第二是可以拖拽(虽然我不常用这个功能 但是这样界面看起来就丰满了很多) 最后不得不吐槽这个的回发事件 我百 ...
- XCActionBar 「Xcode 中的 Alfred」
下载地址:https://github.com/pdcgomes/XCActionBar 基本命令: (1)「command+shift+8」或者双击「command」键可以打开「动作输入框窗口」 ( ...
- 精确计算TFS中新增以及更改的代码行数
<configuration> <configSections> <section name="LOCTargets" type="Cons ...
- Android:如何从堆栈中还原ProGuard混淆后的代码
本文翻译自Android: How To Decode ProGuard's Obfuscated Code From Stack Trace 本篇文章是写给那些在他们的应用中使用ProGuard并且 ...