一 什么是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表达式的更多相关文章

  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. LINQ使用Lambda表达式选择几列

    学习LINQ的Lambda的表达式,尝试从数据集合中,选择其中几列. 创建一个model: source code: namespace Insus.NET.Models { public class ...

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

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

  8. 【2017-06-01】Linq基础+Lambda表达式实现对数据库的增删改查

    一.Linq to sql 类 高集成化的数据库访问技术 使用Linq可以代替之前的Ado.Net.省去了自己敲代码的实体类和数据访问类的大量工作. 实体类: 添加一个Linq to sql 类 -- ...

  9. Linq基础+Lambda表达式对数据库的增删改及简单查询

    一.Linq to sql 类 高集成化的数据库访问技术 使用Linq可以代替之前的Ado.Net,省去了自己敲代码的实体类和数据访问类的大量工作 实体类: 添加一个Linq to sql 类 --- ...

随机推荐

  1. linux 下 取进程占用内存(MEM)最高的前10个进程

    # linux 下 取进程占用 cpu 最高的前10个进程ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head # linux 下 取进程占用内存 ...

  2. 私服 Nexus 的配置

    一.概述 1.概要 现在的项目基本都是用Maven来管理工程,这样一来在公司内容搭建一个私服就非常有必要了,这样一来可以管理公司内部用的JAR包,也可以管理第三方的各种JAR来,以免每次都要从外网的仓 ...

  3. CentOS 7.0系统安装配置LAMP服务器(Apache+PHP+MariaDB)

    CentOS 7.0接触到的用户是比较少的,今天看了站长写了一篇关于centos7中安装配置LAMP服务器的教程,下面我把文章稍加整理一下转给大家学习交流,希望例子能给各位带来帮助哦.   cento ...

  4. iOS 自定义滑动切换TabBar

    貌似经常会用到,自己整理收藏起来,方便日后查找备用. 效果如图: 由于制作gif,调整了属性,所以看起来的效果不好.如果用默认配置,生成的gif会很大. 制作gif: 1.使用QuickTimePla ...

  5. Windows2008 R2下,DCOM配置里的属性灰色不可用的解决方法

    错误为:为应用程序池“XXXXXX”提供服务的进程在与“Windows Process Activation Service”通信时出现严重错误.该进程 ID 为"XXX".数据字 ...

  6. makeimg

    >./simg2img [system.img] [system2.img]>mount -o loop [system2.img] [s/]>./make_ext4fs -s -l ...

  7. 通过PowerShell获取域名whois信息

    Whois 简单来说,就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人.域名注册商.域名注册日期和过期日期等).通过域名Whois服务器查询,可以查询域名归属者联系方式 ...

  8. 构建基于WinRT的WP8.1 App 01:页面导航及页面缓存模式

    本篇博文主要阐述基于Windows Runtime的Windows Phone 应用页面间导航相关知识,主要分为以下几个方面: Window.Frame和Page概览 页面间实现跳转 处理物理后退键 ...

  9. [z] 人工智能和图形学、图像处理方面的各种会议的评级

    转载自:『http://www.cvchina.info/2010/08/31/conference-ranking-byar/』 澳大利亚政府和澳大利亚研究理事会做的,有一定考价值. 会议名称 会议 ...

  10. C#的设计模式分为3大类23种

    创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method ...