介绍LINQ基础之前,首说一下LINQ 的历史和LINQ是什么,然后说一下学习 LINQ要了解的东西和 LINQ基础语法
 
LINQ 的历史

从语言方面的进化
–委托
–匿名方法
–Lambda表达式
–Linq查询表达式

上边这四个我会在下边一一解说

从时间方面的演进
–2004年
–2005年9月,C#2.0的PDC上发布
–2005年11月,C#2.0预览版
–2006年1月,VB8.0预览版
–2007年11月,.net 3.5发布

LINQ是什么

LINQ是语言级集成查询(Language INtegrated Query)
LINQ是一种用来进行数据访问的编程模型,使得.NET语言可以直接支持数据查询
LINQ的目标是降低访问数据的复杂度
LINQ可以用统一的方法访问不同类型的数据,可以将数据作为对象使用
能够更好地与编程模型集成
可以在Visual Studio中进行智能提示
动态编程

LinQ目的

面向对象技术诞生以来并没有解决降低访问和整合信息数据的复杂度的问题。其中两个最主要访问的数据源与数据库和 XML 相关。

使用LINQ的目的是为了提供一个解决对象关系映射问题的方案,同时简化对象和数据源的交互。LINQ最终发展成为一个通用语言集成查询的工具包。

LINQ正如它的名字“集成查询语言”的含义一样,它提供给程序员一个统一的编程界面。程序员不需要关心他将要操作的将是关系数据库还是XML,甚至是远程的对象,它都采用同样的查询方式。就如同通过T-SQL操纵数据库一样,不管是Oracle,SyBase还是SQL Server,他们的Select语法都是一样的。

有了LINQ,程序员便可以不再沉泥于不同的数据访问技术的学习。不管编程语言如何发展,还是数据库技术的发展,都不再需要程序员进行学习,数据存储的效率由数据库厂商进行优化,灵活的数据操作方法由数据访问中间件厂商提供,程序员只需要编写业务逻辑。

 

LINQ包括:
–LINQ to Objects 用于对象的查询
–LINQ to XML 对XML数据的查询
–LINQ to ADO.NET 对数据库的查询
     LINQ to DataSets 数据集
     LINQ to Entities ORM对象
     LINQ to SQL 简易ORM框架
命名空间在System.Linq
实现 IEnumerable<T> 或 IQueryable<T> 接口的对象都可使用LINQ操作

LINQ框架图

 
委托
委托是一种定义方法签名的类型。 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联。 您可以通过委托实例调用方法。
委托用于将方法作为参数传递给其他方法。 事件处理程序就是通过委托调用的方法
public delegate void MyF1( int a);
 
public void M1( int a)
  {
             Console .WriteLine(a);
  }
  MyF1 _myf1 = M1 ;
  myf1(3);
与委托的签名(由返回类型和参数组成)匹配的任何可访问类或结构中的任何方法都可以分配给该委托。 方法可以是静态方法,也可以是实例方法。 这样就可以通过编程方式来更改方法调用,还可以向现有类中插入新代码。 只要知道委托的签名,就可以分配您自己的方法。
 
匿名方法
我们在使用一个方法的时候, 一般情况下我们会先把方法名、参数、返回值
写出来也称做命名方法
int MyMethod(int a){}
匿名方法的意思就是不用给定方法的名称。允许我们定义委托对象可以接收的代码
上边的委托我们可以写成
MyF1 _f = delegate ( int a)
                {
                    Console .WriteLine(a);
                };
            _f(1);
例button的点击事件
通常的写法是
button1.Click += button1_Click;
void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Click!" )
        }
用匿名方法可以这样
button1.Click += delegate( object obj1, EventArgs e)
                {
                    MessageBox .Show("Click!" );
                };
 
 
Lambda 表达式
lambda 取代的匿名方法
Lambda 表达式是一个可用于创建委托或表达式树类型的匿名函数。 通过使用 lambda 表达式,可以写入可作为参数或返回为函数调用值的本地函数。 Lambda 表达式对于编写 LINQ 查询表达式特别有用。
若要创建 Lambda 表达式,必须在 Lambda 运算符 => 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。 例如,lambda 表达式 x => x * x 指定名为 x 的参数并返回 x 的平方。 
我们还是用上边的delegate例子:
MyF1 _my1 = a =>
                {
                    Console .WriteLine(a);
                };
_my1(3);
Button的点击事件可以写成这样
button1.Click += (obj1, obje2) =>
                {
                    MessageBox.Show("Click!" );
                };
 
Linq的基本语法
所有 LINQ 查询操作都由以下三个不同的操作组成:
获取数据源。
创建查询。
执行查询。
查询表达式必须以 from 子句开头,并且必须以 select 或 group 子句结尾。 在第一个 from 子句和最后一个 select 或 group 子句之间,查询表达式可以包含一个或多个下列可选子句:where、orderby、join、let 甚至附加的 from 子句。 还可以使用 into 关键字使 join 或 group 子句的结果能够充当同一查询表达式中附加查询子句的源。
    int[] _scores = new int [] { 97, 92, 81, 60 };           
            IEnumerable <int > _query =
                from score in _scores
                where score > 80
                select score;           
            foreach (int i in _query)
            {
                Console .WriteLine(i + " " );
            } 
也可以这么写
  IEnumerable< int > _query = _scores.Where(x =>  x > 80);
            foreach (int i in _query)
            {
                Console .WriteLine(i + " " );
            }
 

下图显示了完整的查询操作。 在 LINQ 中,查询的执行与查询本身截然不同;换句话说,如果只是创建查询变量,则不会检索任何数据。

查询变量本身只是存储查询命令。 实际的查询执行会延迟到在 foreach 语句中循环访问查询变量时发生。 此概念称为“延迟执行”

LINQ基础概述的更多相关文章

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

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

  2. Laxcus大数据管理系统2.0(2)- 第一章 基础概述 1.1 基于现状的一些思考

    第一章 基础概述 1.1 基于现状的一些思考 在过去十几年里,随着互联网产业的普及和高速发展,各种格式的互联网数据也呈现爆炸性增长之势.与此同时,在数据应用的另一个重要领域:商业和科学计算,在各种新兴 ...

  3. 【MySQL】MySQL无基础学习和入门之一:数据库基础概述和实验环境搭建

    数据库基础概述  大部分互联网公司都选择MySQL作为业务数据存储数据库,除了MySQL目前还有很多公司使用Oracle(甲骨文).SQLserver(微软).MongoDB等. 从使用成本来区分可以 ...

  4. SQL Tuning 基础概述10 - 体会索引的常见执行计划

    在<SQL Tuning 基础概述05 - Oracle 索引类型及介绍>的1.5小节,提到了几种"索引的常见执行计划": INDEX FULL SCAN:索引的全扫描 ...

  5. LINQ基础(二)

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

  6. LINQ基础(三)

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

  7. C#编程(六十)----------LINQ的概述

    LINQ的概述 LINQ的全名为语言继承查询,是VS2008个.NET3.5版中一款突破性的创新,他再对象领域和数据领域之间架起了一座桥梁.使用LINQ能大大加快对于对象数据等等的查询,加快效率. 由 ...

  8. Linq基础操作之Select,Where,OrderBy,ThenBy源码分析

    Linq基础操作之Select,Where,OrderBy,ThenBy源码分析 二:Select 它是延迟执行.yield有得一拼,因为他们都是生成了一个枚举类. if (source is TSo ...

  9. Linq基础必备

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

随机推荐

  1. 磁带机Media is unrecognized

    早晨检查磁带备份作业时,发现有个驱动的作业一直处于"Queue"状态,检查发现驱动有磁带,在Alert里面发现出现下面"Media is unrecognized&quo ...

  2. 一篇博客理解Recyclerview的使用

    从Android 5.0开始,谷歌公司推出了RecylerView控件,当看到RecylerView这个新控件的时候,大部分人会首先发出一个疑问,recylerview是什么?为什么会有recyler ...

  3. Python类属性的延迟计算

    所谓类属性的延迟计算就是将类的属性定义成一个property,只在访问的时候才会计算,而且一旦被访问后,结果将会被缓存起来,不用每次都计算. 优点 构造一个延迟计算属性的主要目的是为了提升性能 实现 ...

  4. (原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 决策树分析算法)

    随着大数据时代的到来,数据挖掘的重要性就变得显而易见,几种作为最低层的简单的数据挖掘算法,现在利用微软数据案例库做一个简要总结. 应用场景介绍 其实数据挖掘应用的场景无处不在,很多的环境都会应用到数据 ...

  5. 批处理脚本为Mysql重置root密码(重置密码为123456)

    @echo off title mysql ::从注册表找到Mysql的安装路径写入文件mysql.txt reg query HKLM\SYSTEM\ControlSet001\Services\M ...

  6. Jmeter之Bean shell使用(二)

    上一篇Jmeter之Bean shell使用(一)简单介绍了下Jmeter中的Bean shell,本文是对上文的一个补充,主要总结下常用的几种场景和方法,相信这些基本可以涵盖大部分的需求.本节内容如 ...

  7. 怎么使PUTTY一直连接

    如何才能保证PUTTY一直连接,即使我们好长时间不去敲命令,也让它一直连接着? PuTTY的设置方法是:在Connection里面有个Seconds between keepaliaves.这里就是每 ...

  8. [转] Finding the Best Programmer's Font

    原文 Finding the Best Programmer's Font

  9. Tomcat免安装配置2

    Tomcat 是一款优秀的JSP/Servlet容器,最初由SUN开发,后来被贡献给了Apache社区.Tomcat现在的版本已到6.Tomcat6实现了Servlet2.5和JSP2.1规范.针对w ...

  10. 警惕多iframe下的同名id引起的诡异问题

    遇到个诡异bug,虽然bug中套bug,忽略次要bug,其中最诡异最典型的现象是多行window.top.$("#id")取值操作,其中有一行却取不到值.这个着实让我费解.因为用到 ...