linq学习(二)
百度搜索:C# linq查询新对象
直接从list中查出一个新对象集合。
文章:https://blog.csdn.net/lym940928/article/details/80278783
from 临时变量 in 实现IEnumerable<T>接口的对象
where条件表达式
[orderby 条件]
[group by 条件]
select 临时变量中被查询的值
示例代码,表达式写法:
//masterList是包含多个Master对象的一个列表
var res = from m in masterList
where m.Level > 8
select m.Name;
//此时res是一个包含符合条件的Name列表
example:(采用Lambda表达式的写法)
var res = masterList.Where(m=>m.Level>8)
//结果完全相同
多个限制条件
example:(表达式写法)
//masterList是包含多个Master对象的一个列表
var res = from m in masterList
where m.Level > 8 && m.Age > 50 //通过&&添加并列的条件
select m.Name;
example:(采用Lambda表达式的写法)
var res = masterList.Where(m=>m.Level > 8 && m.Age > 50);
自己写的示例代码,托条件或:
List<String> list = new List<string>(){ "a1","b","a1","d","e"};
var list2 = from a in list
where a == "a1" || a == "b"
select a;
foreach(var a in list2)
{
Console.WriteLine(a);
}
=====================================================
文章:30分钟LINQ教程
原文写的非常好,非常系统。阅读建议,如果懂了linq的前提,前面就不要看了,直接往后滚动页面看,因为文章太长了。
来看一篇伪代码:
from [type] id in source
[join [type] id in source on expr equals expr [into subGroup]]
[from [type] id in source | let id = expr | where condition]
[orderby ordering,ordering,ordering...]
select expr | group expr by key
[into id query]
<1>第一行的解释:
type是可选的,
id是集合中的一项,
source是一个集合,
如果集合中的类型与type指定的类型不同则导致强制类型转化
<2>第二行的解释:
一个查询表达式中可以有0个或多个join子句,
这里的source可以是一个全新的集合,可以不等于第一句中的source
expr可以是一个表达式
[into subGroup] subGroup是一个中间变量,
它继承自IGrouping,代表一个分组,也就是说“一对多”里的“多”
可以通过这个变量得到这一组包含的对象个数,以及这一组对象的键
比如:
from c in db.Customers
join o in db.Orders on c.CustomerID
equals o.CustomerID into orders
select new
{
c.ContactName,
OrderCount = orders.Count()
};
<3>第三行的解释:
一个查询表达式中可以有1个或多个from子句
一个查询表达式中可以有0个或多个let子句,let子句可以创建一个临时变量
比如:
from u in users
let number = Int32.Parse(u.Username.Substring(u.Username.Length - 1))
where u.ID < 9 && number % 2 == 0
select u
一个查询表达式中可以有0个或多个where子句,where子句可以指定查询条件
<4>第四行的解释:
一个查询表达式可以有0个或多个排序方式
每个排序方式以逗号分割
<5>第五行的解释:
一个查询表达式必须以select或者group by结束
select后跟要检索的内容
group by 是对检索的内容进行分组
比如:
from p in db.Products
group p by p.CategoryID into g
select new { g.Key, NumProducts = g.Count()};
<6>第六行的解释:
最后一个into子句起到的作用是
将前面语句的结果作为后面语句操作的数据源
比如:
from p in db.Employees
select new
{
LastName = p.LastName,
TitleOfCourtesy = p.TitleOfCourtesy
} into EmployeesList
orderby EmployeesList.TitleOfCourtesy ascending
select EmployeesList;
三:参考资料
《LINQ实战》
《深入理解C#》第二版
《CLR VIA C#》第三版
《C# 高级编程》第四版
等等。
linq学习(二)的更多相关文章
- Linq学习<二>
http://www.cnblogs.com/wyqlijin/archive/2011/02/25/1964934.html 这位仁兄写的比较高深,建议大家看看 一: 这一篇以一个数据类为例,操作数 ...
- Linq学习(二)-本次学习用到的资料
本次学习用到的数据库初始化脚本如下 use KMS create table Blog_User ( UserId ,1), NickName ), CreateTime datetime ) cre ...
- Linq学习之操作符
一.环境搭建 下面将逐步搭建我们学习的环境,这个环境不仅仅是这次需要使用,以后的教程一样需要使用这个环境.所以请大家务必按照 搭建这里的环境否则会影响你后面的学习. 我们用到的几张表 通知消息表: 用 ...
- LINQ to XML LINQ学习第一篇
LINQ to XML LINQ学习第一篇 1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: public static void CreateDoc ...
- LINQ学习系列-----1.3 扩展方法
这篇内容继续接着昨天的Lambda表达式的源码继续下去.昨天讲了Lambda表达式,此篇讲扩展方法,这两点都是Linq带来的新特性. 一.扩展方法介绍 废话不多说,先上源码截图: 上图中Ge ...
- LINQ学习系列-----2.3 迭代器带来的延迟查询
此篇博文承接上一篇博文: LINQ学习系列-----2.2 迭代器 一.第一次执行 废话不多说,上源码: 执行结果下图: 为什么会这样?其实原因很简单 fro ...
- C# LINQ学习笔记一:走进LINQ的世界
本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5832322.html,记录一下学习过程以备后续查用. LINQ 简介: 语言集成查询(LINQ)是Vi ...
- Linq学习工具及Lamada表达式
好东西.转载一个.以备学习 Linq学习工具: http://www.linqpad.net/ Lamada表达式: Func<int, int, int> IntPow = (x ...
- emberjs学习二(ember-data和localstorage_adapter)
emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...
- linq学习
最全的linq学习文章: http://www.cnblogs.com/heyuquan/p/Linq-to-Objects.html
随机推荐
- 【MM系列】SAP S/4 HANA的物料编码40位设置
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP S/4 HANA的物料编码4 ...
- 李宗盛spss罚写2019-12-8
以上过程即整个假设检验的思想:反证法及小概率原理. 因而假设检验有可能犯两类错误. 第一类错误:原假设正确,而错误地拒绝了它,即“拒真”的错误,其发生的概率为第一类错误的概率. 第二类错误:原假设不正 ...
- 给引入页面的js和css资源加上版本号,防止浏览器缓存资源
最近因为在做前端开发的相关工作,每次发布新版本以后,不到5分钟,测试童鞋一个接一个的抱怨说BUG根本就没有修改,这个时候你说的最多的话就是“清缓存!!清页面缓存!!你没有清缓存!!你清理了页面缓存就对 ...
- 【单元测试框架unittest】
- CEC、ARC功能介绍
众所周知,HDMI作为一个数字化视频音频的接收标准,是可以同时传输视频和音频的,当然随着HDMI版本的提升,它的功能也一直在增强.事实上HDMI升级到1.3时,人们就发现了HDMI多了一个CEC功能. ...
- SpringBoot(二)启动原理
SpringBoot自动配置模块 该配置模块的主要使用到了SpringFactoriesLoader,即Spring工厂加载器,该对象提供了loadFactoryNames方法,入参为factoryC ...
- Rabbitmq C++客户端 Rabbitmq Client
概述 最近项目消息队列服务选用了rabbitmq,server端用的C++开发的,于是需要开发rabbitmq的c++客户端,国际惯例先百度了一圈,然后github搜了一圈,竟然发现排名靠前的需要付费 ...
- c++语法笔记(中)
继承与派生 继承面向对象程序设计4个主要特征:抽象,封装,继承,多态性c++通过继承实现可重用性.有时两个类的内容基本相同或有一部分相同,这时可以利用原来声明的类作为基础,再加上新的内容即可,减少了工 ...
- 在VMware Workstation10下CentOS7虚拟机中创建与主机共享文件夹的详细步骤
一.前言 在使用虚拟机时,常常需要与宿主计算机(以下简称为主机)操作系统交换文件,为此需要在虚拟机与主机之间建立共享文件夹. 二. 安装VMTools 要使用共享文件机制,必须首先安装VMTools. ...
- python学习-21 集合 2
集合的其他方法 1.交差补集 math = {'xm','xh','xg','xx'} english ={'xm','xh','dm','john'} print(math.symmetric_di ...