百度搜索: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. 网页布局(html+css基础)

    一.如何用CSS进行网页布局 二.网页布局基础 三.网页简单布局之结构和表现原则 四.CSS Sprite雪碧图应用 什么叫布局? 网页的特点: 网页自适应宽度: 网页长度无限延长: (分栏也叫分列, ...

  2. laydate时间控件:开始时间,结束时间最大最小值

    时间控件地址及插件下载链接:https://www.layui.com/doc/modules/laydate.html 填充时间已两个功能为例: 1.添加功能 :时间 规则:选择开始时间后,点击结束 ...

  3. Linux 教程学习笔记

    目录 一.Linux 系统启动过程 1.分为 5 个阶段 3.shell.操作系统.内核的关系 二.Linux 系统目录结构 三.Linux 文件基本属性 1.Linux文件属性 3.更改文件属性: ...

  4. glib系列2 APP编译

    编译命令 gcc main.c `pkg-config --cflags glib-2.0 --libs glib-2.0` 头文件 $ ls /usr/local/include/glib-2.0/ ...

  5. asp.net core-14.JWT认证授权 生成 JWT Token

    源码下载 语言组织能力不好 ,看这个 视频 用visual studio code打开文件,运行dotnet watch run 之后在postman里面去访问 拿到Token后

  6. QMetaMethod 获取成员函数的元信息

    在上一篇中,我们将的是QMetaEnum类,它可以获得一个类中由Q_ENUM宏或Q_FLAG宏声明的枚举类型的元信息.同样,QMetaMethod类是用来获取成员方法的元信息的一个类.通过该类,我们可 ...

  7. QMap里面的值任然是一个QMap,在做循环插入的时候需要记得清空。

    这个问题是我以前的一个问题,当时由于有其他的事情去处理就忘记了,前段时间我的项目要进行集成测试了,为了避免这个缺陷,只能再把这个问题想起来了,再进行解决.有很多问题你觉得不应该发生,其实很多时候都是逻 ...

  8. CSS3中三种清除浮动(float)影响的方式

    float是HTML中布局的一大关键,很多难题一旦用上float都能很愉快地解决.但是凡是好用的,也容易出错.比如当子元素都为float时,其父元素会受影响,或者偶尔会发现自己某个div的高度变成了0 ...

  9. Spring Boot 默认首页

    //继承 WebMvcConfigurerAdapter @Override public void addViewControllers(ViewControllerRegistry registr ...

  10. Java Convention 公约数计算

    Java Convention 公约数计算 /** * <html> * <body> * <P> Copyright 1994-2018 JasonInterna ...