Linq的常见查询
首先定义几个模型类:
/// <summary>
/// 员工类
/// </summary>
public class Employee
{
/// <summary>
/// 员工id
/// </summary>
public int Empid { get; set; }
/// <summary>
/// 部门id
/// </summary>
public int DeptId { get; set; }
/// <summary>
/// 员工姓名
/// </summary>
public string EmpName { get; set; }
/// <summary>
/// 员工编号
/// </summary>
public string EmpCode { get; set; }
}
/// <summary>
/// 部门模型
/// </summary>
public class DeptModel
{
/// <summary>
/// 部门id
/// </summary>
public int DeptId { get; set; }
/// <summary>
/// 部门名称
/// </summary>
public string DeptName { get; set; }
}
组装数据:
/// <summary>
/// 员工数据
/// </summary>
private static List<Employee> Emp = new List<Employee>()
{
new Employee {Empid=,DeptId=,EmpName="王芳",EmpCode="" },
new Employee {Empid=,DeptId=,EmpName="韩丽",EmpCode="" },
new Employee {Empid=,DeptId=,EmpName="李飞",EmpCode="" },
new Employee {Empid=,DeptId=,EmpName="李丽",EmpCode="" },
new Employee {Empid=,DeptId=,EmpName="王二麻",EmpCode="" },
new Employee {Empid=,DeptId=,EmpName="刘慧",EmpCode="" },
new Employee {Empid=,DeptId=,EmpName="张飞",EmpCode="" },
new Employee {Empid=,DeptId=,EmpName="测试人员",EmpCode="" },
};
/// <summary>
/// 部门数据
/// </summary>
private static List<DeptModel> Dept = new List<DeptModel>()
{
new DeptModel {DeptId=,DeptName="产品部" },
new DeptModel {DeptId=,DeptName="管理层" },
new DeptModel {DeptId=,DeptName="人事部" },
new DeptModel {DeptId=,DeptName="研发部" },
new DeptModel {DeptId=,DeptName="项目部" },
new DeptModel {DeptId=,DeptName="市场部" },
new DeptModel {DeptId=,DeptName="测试部门" },
};
1、内连接(join)查询
//Lambda写法
var data = Emp.Join(Dept, e => e.DeptId, d => d.DeptId, (e, d) => new { e, d }).ToList();
//Linq写法
var data2 = (from e in Emp
join d in Dept
on e.DeptId equals d.DeptId
select new { e, d }).ToList();
2、左(left join )连接查询
//Linq写法
var data3 = (from e in Emp
join d in Dept
on e.DeptId equals d.DeptId into list
from dept in list
select new { e, dept }).ToList();
//Lambda写法
var data4 = Emp.GroupJoin(Dept, e => e.DeptId, d => d.DeptId, (e, d) => new { e, d = d.FirstOrDefault() }).ToList();
3、交叉(Corss join)连接
//Linq写法
var data5 = (from e in Emp
from d in Dept
select new { e, d }).ToList();
//Lambda写法
var data6 = Emp.SelectMany(emp => Dept.Select(dept => new { emp, dept })).ToList();
Lambda
Func<int, string> fun = (int a) => { return "返回值" + a; };
Func<int, string> fun2 = delegate (int a) { return "返回值" + a; };
Action action = () => { Console.WriteLine("返回值1"); };
Action action2 = delegate () { Console.WriteLine("返回值2"); };
Predicate<int> predicate = delegate (int a) { return a > ; };
Predicate<int> predicate3 = (int a) => { return a > ; };
Linq的常见查询的更多相关文章
- Linq之常见关键字
目录 写在前面 系列文章 常见关键字 总结 写在前面 前面的几篇文章算是对linq的铺垫,从本篇开始将进行linq的语法及实践. 系列文章 Linq之Lambda表达式初步认识 Linq之Lambda ...
- 转linq中的Single()、First()、Take(1) LINQ 标准的查询操作符 排序 orderby、thenby、Take
Single():操作一个集合,同时强要求只有一个对象匹配,并返回这一个. First():操作一个集合,可以有多个对象匹配,但是只返回第一个. Take(1):操作一个集合,可以有对个对象匹配,单只 ...
- LINQ to Entities 查询语法
转自: http://www.cnblogs.com/asingna/archive/2013/01/28/2879595.html 实体框架(Entity Framework )是 ADO.NET ...
- 浅谈sql 、linq、lambda 查询语句的区别
浅谈sql .linq.lambda 查询语句的区别 LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量 ...
- LINQ to Entities 查询注意事项
1> 排序信息丢失 如果在排序操作之后执行了任何其他操作,则不能保证这些附加操作中会保留排序结果.这些操作包括 Select 和 Where 等.另外,采用表达式作为输入参数的 First 和 ...
- 高性能MySql进化论(十一):常见查询语句的优化
总结一下常见查询语句的优化方式 1 COUNT 1. COUNT的作用 · COUNT(table.filed)统计的该字段非空值的记录行数 · ...
- xBIM 使用Linq 来优化查询
目录 xBIM 应用与学习 (一) xBIM 应用与学习 (二) xBIM 基本的模型操作 xBIM 日志操作 XBIM 3D 墙壁案例 xBIM 格式之间转换 xBIM 使用Linq 来优化查询 x ...
- C# - LINQ 语言集成查询
LINQ(Language Integrated Query) LINQ语言集成查询是一组用于C#语言的扩展.它允许编写C#代码对数据集进行查询,比如查询内存中的对象或查询远程数据库的表.利用linq ...
- linq not in 查询
想要的sql: select A.* from BL_BCSS_Invoice A join BL_BCSS_OfflineInvoice B on A.ID!=B.InvoiceID; 不知道如何写 ...
随机推荐
- InfluxDB学习之InfluxDB的基本操作| Linux大学
来源地址:https://www.linuxdaxue.com/influxdb-study-series-manual.html 本文属于<InfluxDB系列教程>文章系列,该系列共包 ...
- html文件form表单action调用servlet连接mysql数据库实例
web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...
- pytest.2.运行多个文件
From: http://www.testclass.net/pytest/multiple_tests/ 背景 在现实的测试活动中,我们经常会定义多个用例文件,用来实现业务逻辑或其他逻辑上用例的物理 ...
- STL基础--迭代器和算法
1 迭代器 Iterators 5种迭代器类型 随机访问迭代器: vector, deque, array // 允许的操作 vector<int> itr; itr = itr + 5; ...
- 服务容错保护断路器Hystrix之七:做到自动降级
从<高可用服务设计之二:Rate limiting 限流与降级>中的“自动降级”中,我们这边将系统遇到“危险”时采取的整套应急方案和措施统一称为降级或服务降级.想要帮助服务做到自动降级,需 ...
- InnoDB多版本(MVCC)实现简要分析(转载)
http://hedengcheng.com/?p=148 基本知识 假设对于多版本(MVCC)的基础知识,有所了解.InnoDB为了实现多版本的一致读,采用的是基于回滚段的协议. 行结构 InnoD ...
- PHP——抽象类与接口的区别
在学习PHP面向对象时,都会在抽象类与接口上迷惑,作用差不多为什么还那么容易混淆,何不留一去一?但是事实上两者的区别还是很大的,如果能够很好地运用PHP的两个方法,面向对象的程序设计将会更加合理.清晰 ...
- phpStudy配置站点 解决You don't have permission to access / on this server
1.配置站点:打开phpStudy->其他选项菜单->站点域名管理 2.配置站点:打开phpStudy->其他选项菜单->打开hosts 3.在apache的配置文件vhost ...
- PHP升级7.2之后需要注意的事情
最近升级了PHP版本,从7.1升级到7.2,升级前版本: PHP 7.1.14 (cli) (built: Feb 2 2018 08:42:59) ( NTS ) Copyright (c) 199 ...
- T-SQL 有参数存储过程的创建与执行
use StudentManager go if exists(select * from sysobjects where name='usp_ScoreQuery2') drop procedur ...