百度搜索: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学习(二)的更多相关文章

  1. Linq学习<二>

    http://www.cnblogs.com/wyqlijin/archive/2011/02/25/1964934.html 这位仁兄写的比较高深,建议大家看看 一: 这一篇以一个数据类为例,操作数 ...

  2. Linq学习(二)-本次学习用到的资料

    本次学习用到的数据库初始化脚本如下 use KMS create table Blog_User ( UserId ,1), NickName ), CreateTime datetime ) cre ...

  3. Linq学习之操作符

    一.环境搭建 下面将逐步搭建我们学习的环境,这个环境不仅仅是这次需要使用,以后的教程一样需要使用这个环境.所以请大家务必按照 搭建这里的环境否则会影响你后面的学习. 我们用到的几张表 通知消息表: 用 ...

  4. LINQ to XML LINQ学习第一篇

    LINQ to XML LINQ学习第一篇 1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: public static void CreateDoc ...

  5. LINQ学习系列-----1.3 扩展方法

    这篇内容继续接着昨天的Lambda表达式的源码继续下去.昨天讲了Lambda表达式,此篇讲扩展方法,这两点都是Linq带来的新特性.    一.扩展方法介绍   废话不多说,先上源码截图: 上图中Ge ...

  6. LINQ学习系列-----2.3 迭代器带来的延迟查询

    此篇博文承接上一篇博文: LINQ学习系列-----2.2 迭代器 一.第一次执行                      废话不多说,上源码: 执行结果下图: 为什么会这样?其实原因很简单 fro ...

  7. C# LINQ学习笔记一:走进LINQ的世界

    本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5832322.html,记录一下学习过程以备后续查用. LINQ 简介:     语言集成查询(LINQ)是Vi ...

  8. Linq学习工具及Lamada表达式

    好东西.转载一个.以备学习 Linq学习工具:     http://www.linqpad.net/ Lamada表达式: Func<int, int, int> IntPow = (x ...

  9. emberjs学习二(ember-data和localstorage_adapter)

    emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...

  10. linq学习

    最全的linq学习文章: http://www.cnblogs.com/heyuquan/p/Linq-to-Objects.html

随机推荐

  1. Docker 容器的资源限制 cgroup(九)

    目录 一.cgroup简介 二.CPU资源配额控制 1.CPU份额控制 2.CPU周期控制 3.CPU core控制 4.CPU配额控制参数的混合使用 二.对内存的限额 三.对 Block IO 的限 ...

  2. Bilibili用户需求分析报告

    一.产品简介 哔哩哔哩(英文名称:bilibili,简称B站)是国内知名的弹幕视频分享站,也是国内领先的年轻人文化社区 二.用户需求分析 (一)目标用户 根据百度指数,bilibili的主要用户遍布沿 ...

  3. windows使用sqlpus连接oracle 数据库

    1.先安装好Instant Client程序. 2.打开cmd 执行sqlplus命令,如果出现如下图 2.说明需要把oracle install 的bin目类 添加系统环境path中,如下图添加环境 ...

  4. SSH简介及两种远程登录的方法

    出处 https://blog.csdn.net/li528405176/article/details/82810342 目录 SSH的安全机制 SSH的安装 启动服务器的SSH服务 SSH两种级别 ...

  5. C++Primer 5th Chap7 Classes

    this关键字: 在成员函数内部可以直接调用函数的对象的成员(类成员的直接访问看做是对this隐式引用,默认this指向非常量) 例如:string isbn() const{return this- ...

  6. 自定义模块,time,datetime以及random

    自定义模块,time,datetime以及random 1.自定义模块 自定义一个模块 import #导入 (拿工具箱) 模块分类 1.内置模块(标准库) --python解释器自带的.py文件(模 ...

  7. QMetaEnum获取枚举元信息

    QMetaEnum 类提供了一个枚举的元数据.我们可以使用该类的静态模板函数,fromType<enumerator>来获得关于某个枚举的QMetaEnum对象,然后就可以调用该类的成员函 ...

  8. (十二)easyUI之表单和验证完成登录页面

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  9. (十三)SpringBoot之Spring-Data-Jpa(二)CRUD实现以及添加自定义方法

    一.jpa中添加自定义方法 http://blog.csdn.net/qq_23660243/article/details/43194465 二.案例 1.3 引入jpa依赖 <depende ...

  10. 中国5级行政区域MySQL数据库库

    爬取国家统计局官网的行政区域数据,包括省市县镇村5个层级,其中港澳地区的数据只有3级;台湾地区4级;包含大陆地区的邮政编码和经纬度信息. 行政划分的总体结构是: 省->市(州)->县(区) ...