1.LINQ的数据源

必须可枚举的,即必须是数组或者集合
(继承了IEnumerable<T>接口就可以,注意是IEnumerable<T>,不是IEnumerable接口,不一样,继承后者只能使用foreach,不能使用linq)

 
定义:Linq 是一跨各种数据源和数据格式的数据模型;它在查询是,始终是把它作为一种对象来操作,可以使用基本相同的编码模型查询和数据的转换XML,SQL,ADO数据等;  

 
对于自定义属性类,继承CollectionBase类,实现了索引器,但是没有实现集合的函数,所以这种类是无法实现LINQ语句的,但是可以使用foreach来访问,书中讲foreach遍历的是实现了IEnumerale接口的集合,可见并不是这样的,foreach只是遍历有索引器的集合,而LINQ才真正遍历实现了IEnumerable接口的集合
复习一下集合的要求:
1.要迭代一个类,需要实现GetEnumerator()方法,返回类型是IEnumerator
2.要迭代类的成员,使用IEnumerable返回类型
  1. class farmer :CollectionBase
    {
    publicstring _name;
    publicint _age;
    public farmer(string s,int i )
    {
    _name = s;
    _age = i;
    }
    publicvoid add(farmer s)
    {
    List.Add(s);
    }
    public farmer this[int index]
    {
    set{List[index]= value;}
    get {return(farmer)List[index];}
    }
    }

      

2.LINQ的两种写法
  1. var query =from customer inthis._customerList
    where customer.City=="台北"
    letIndex=this._customerList.IndexOf(customer)
    selectnew{ customer,Index};

      

这种写法的select可以返回对象,字段,匿名类型返回的是一个新的对象(这样理解var query = new {customer,index})
------------------------------------------------------------------------------------------
  1. var query =this._customerList
    .Where(c => c.City=="台北") //这里面的C就是对象
    .Select(c =>new{ custom = c,Index=this._customerList.IndexOf(c)}); //返回的是新的query对象集合,这个集合里面装的是匿名对象'a的集合

      

这种写法中Select叫做投影运算符,是在Linq查询中从其他数据类型中创建新数据类型的技术(它可以改变结果的原始类型)
其中Select和Where的顺序可以调换
重点:只有在这种写法中才能用lambda表达式
 
Foreach 迭代时访问的其实是IEnumerator迭代器这个东西,任何实现了IEnumerator GetNumerator方法的接口,都能实现foreach的遍历
 
LINQ的数据源必须是继承了IEnumerable<T>接口的类,LINQ迭代的不仅仅是IEnuamertor迭代器,还有其他东西
 
 

from 指定数据源和范围变量

where 根据布尔表达式(由逻辑与 或 等组成)从数据源中筛选元素

select 指定查询结果中的元素所具有的类型或表现形式

group 对对查询结果按照键值进行分组

into 提供一个标示符,它可以充当对 join group 或 select 子句结果的引用

orderby 对查询出的元素进行排序

join 按照两个指定匹配条件来联接俩个数据源

let 产生一个用于查询表达式中子表达式查询结果的范围变量

迭代器块中用于向枚举数对象提供值或发出迭代结束信号。

yield return <expression>;
yield break;

计算表达式并以枚举数对象值的形式返回;expression 必须可以隐式转换为迭代器的 yield 类型。

yield 语句只能出现在 iterator 块中,该块可用作方法、运算符或访问器的体。

C#中的LINQ 基础的更多相关文章

  1. 如何在ASP.NET Core中实现一个基础的身份认证

    注:本文提到的代码示例下载地址> How to achieve a basic authorization in ASP.NET Core 如何在ASP.NET Core中实现一个基础的身份认证 ...

  2. [转]如何在ASP.NET Core中实现一个基础的身份认证

    本文转自:http://www.cnblogs.com/onecodeonescript/p/6015512.html 注:本文提到的代码示例下载地址> How to achieve a bas ...

  3. [.net 面向对象编程基础] (19) LINQ基础

    [.net 面向对象编程基础] (19)  LINQ基础 上两节我们介绍了.net的数组.集合和泛型.我们说到,数组是从以前编程语言延伸过来的一种引用类型,采用事先定义长度分配存储区域的方式.而集合是 ...

  4. LINQ基础概述

    介绍LINQ基础之前,首说一下LINQ 的历史和LINQ是什么,然后说一下学习 LINQ要了解的东西和 LINQ基础语法   LINQ 的历史 从语言方面的进化 –委托 –匿名方法 –Lambda表达 ...

  5. LINQ基础(二)

    本文主要介绍LINQ查询操作符 LINQ查询为最常用的操作符定义了一个声明语法.还有许多查询操作符可用于Enumerable类. 下面的例子需要用到LINQ基础(一)(http://www.cnblo ...

  6. LINQ基础(三)

    一.并行LINQ System.Linq名称空间中包含的类ParallelEnumerable可以分解查询的工作,使其分布在多个线程上. 尽管Enumerable类给IEnumerable<T& ...

  7. Linq基础必备

    1.linq基础必备之对象初始化器和匿名类型因果分析   3. 一:对象初始化器 1.就是在new的时候给公共属性赋值的一种方式 2. 在没有初始化器之前的时候,我们是怎么初始化的呢??? 1. 构造 ...

  8. C#3.0新增功能09 LINQ 基础01 语言集成查询

    连载目录    [已更新最新开发文章,点击查看详细] 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称. 数据查询历来都表示为简单的字符串,没有编译时类型检查或 Inte ...

  9. C#中的Linq to Xml详解

    这篇文章主要介绍了C#中的Linq to Xml详解,本文给出转换步骤以及大量实例,讲解了生成xml.查询并修改xml.监听xml事件.处理xml流等内容,需要的朋友可以参考下 一.生成Xml 为了能 ...

随机推荐

  1. C语言——结构体的使用

    C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. 1.建立一个结构体 struct 结构体名{ 成员列表 }; struct Date { int month; int da ...

  2. Warning: File `src/core/nginx.h&#39; has modification time 1.2e+07 s in the future

    Nginx安装时Warning: File `src/core/nginx.h' has modification time 1.2e+07 s in the future问题的解决方法 问题场景: ...

  3. luogu3811 【模板】乘法逆元

    题目大意:给出n,求1~n所有数的乘法逆元. 乘法逆元的概念是:如果b*rev(b)≡1 (mod p),p与b互质,则rev(b)就是b的模p乘法逆元.乘法逆元往往用于除法取模. 具体操作详见htt ...

  4. Eclipse打开ftl文件,高亮显示

    解决方式一:下载eclipse相关的freemarker插件 解决方式二:原生解决方式,方法特点无需下载插件,和eclipse编辑html和jsp文件一模一样 步骤: 1:windows---pref ...

  5. putty配色方案【转】

    本文转载自:http://blog.csdn.net/hfut_jf/article/details/53636080 putty默认的配色方案简直毫无人道主义可言,所以找了个,好多了,转载自http ...

  6. Node.js:NPM 使用介绍

    ylbtech-Node.js:NPM 使用介绍 1.返回顶部 1. NPM 使用介绍 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: ...

  7. Core篇——初探IdentityServer4(客户端模式,密码模式)

    Core篇——初探IdentityServer4(客户端模式,密码模式) 目录 1.Oatuth2协议的客户端模式介绍2.IdentityServer4客户端模式实现3.Oatuth2协议的密码模式介 ...

  8. WEBGL学习笔记(七):实践练手1-飞行类小游戏之游戏控制

    接上一节,游戏控制首先要解决的就是碰撞检测了 这里用到了学习笔记(三)射线检测的内容了 以鸟为射线原点,向前.上.下分别发射3个射线,射线的长度较短大概为10~30. 根据上一节场景的建设,我把y轴设 ...

  9. 依赖注入与Service Locator

    为什么需要依赖注入? ServiceUser是组件,在编写者之外的环境内被使用,且使用者不能改变其源代码. ServiceProvider是服务,其类似于ServiceUser,都要被其他应用使用,不 ...

  10. ajax获取跨域数据

    1.效果图 2.源码 <%@ page contentType="text/html;charset=UTF-8" language="java" %&g ...