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. Java类集综合练习——信息管理(增、删、改、查)

    一.实现功能——模拟学生选课功能 1.选择课程 2.修改所选课程 二.实现功能——模拟学生信息管理功能 1.添加学生信息 2.修改学生信息 二.主要代码(在同一个包里) 1.课程类 public cl ...

  2. 【java项目实战】ThreadLocal封装Connection,实现同一线程共享资源

    线程安全一直是程序员们关注的焦点.多线程也一直是比較让人头疼的话题,想必大家以前也遇到过各种各种的问题.我就不再累述了.当然,解决方案也有非常多,这篇博文给大家提供一种非常好的解决线程安全问题的思路. ...

  3. P1127 词链

    P1127 词链 题目描述 如果单词X的末字母与单词Y的首字母相同,则X与Y可以相连成X.Y.(注意:X.Y之间是英文的句号“.”).例如,单词dog与单词gopher,则dog与gopher可以相连 ...

  4. A - Antipalindrome

    Problem description A string is a palindrome if it reads the same from the left to the right and fro ...

  5. window下安装git

  6. lua lfs库

     lfs.attributes(filepath [, aname]) 获取路径指定属性    lfs.chdir(path) 改变当前工作目录,成功返回true,失败返回nil加上错误信息    l ...

  7. C++关键字简述

    ID 范畴 关键字 说明 1 数据类型 bool 基本类型—-布尔类型 2 数据类型 char 基本类型—-字符类型 3 数据类型 wchar_t 基本类型—-宽字符类型 4 数据类型 double ...

  8. css3伸缩布局中justify-content详解

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Domain=NSOSStatusErrorDomain Code=1937337955 关于iOS录音AVAudioRecorder与音频播放AVAudioPlayer真机调试录音不能播放的问题

    error:Domain=NSOSStatusErrorDomain Code=1937337955 ,这个错误很常见, 原因是因为我们需要调用另外一个AVAudioPlayer 的初始化方法,来确定 ...

  10. ASP.NET 微信公众平台模板消息推送功能完整开发

    最近公众平台的用户提出了新需求,他们希望当收到新的邮件或者日程的时候,公众平台能主动推送一条提醒给用户.看了看平台提供的接口,似乎只有[模板消息]能尽量满足这一需求,但不得不说微信提供的实例太少,而且 ...