近期Linq To Objects总结

  Linq To Objects是基于C#3.0的扩展方法特性和更复杂的类型参数推断特性。

扩展方法能像目标类型的实例方法一样被调用,而且也能像实例方法一样被链起来,而C#3.0中的类型推断允许基于一个类型参数推断结果来推断另外一个类型参数,如果没有这两个特性,那么linq to objects估计会是另外一个样子。

var result = from defect in SampleData.AllDefects
                         select defect;

  像这样的一个最简单linq表达式,C#编译器会先对表达式进行转译。

var result = SampleData.AllDefects.Select(defect
                => defect);

  这就是转译之后的代码。Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector)方法是定义在Enumerable类中的扩展方法。

  在整个转译的过程中,仅仅只是把表达式翻译成普通的C#代码(将对应的linq操作符转换成对相应方法的调用)。转译完成之后,编译器再尝试推断类型参数,应用类型参数。所以说我们使用linq表达式和调用像“Select”这样的扩展方法而生成的IL代码是完全相同的。

   var result = from defect in SampleData.AllDefects
                       where defect.Status != Status.Closed
                       where defect.AssignedTo == SampleData.Users.TesterTim
                       select defect;

  而linq to objects的延迟加载则是因为迭代器。整个表达式运行完成之后并不会把所有的数据都经过where条件过滤然后将所有符合条件的数据加到结果中,当我们使用foreach语句迭代结果的时候,一个数据项都会从数据源中流出,经过管道过滤,最终到达结果集中被使用。当然,如果使用类似于Count()这样的方法会造成所有的数据都被加载到结果集中(一般来说,返回另外一个序列的操作是延迟加载的,而返回单一值的会立即计算)。

  以上是我个人的理解,如果有问题,欢迎大家指出。

近期Linq To Objects总结

时间: 2024-11-09 00:39:08

近期Linq To Objects总结的相关文章

从LINQ开始之LINQ to Objects(上)

LINQ概述 LINQ,语言集成查询(Language Integrated Query),它允许使用C#或VB代码以查询数据库相同的方式来操作不同的数据源. LINQ体系结构 从上图可以看出,LINQ总共包括五个部分:LINQ to Objects.LINQ to DataSets.LINQ to SQL.LINQ to Entities.LINQ to XML.LINQ to Objects:对内存中集合的操作LINQ to DataSets:对数据集Datatable的操作LINQ to

从LINQ开始之LINQ to Objects(下)

前言 上一篇<从LINQ开始之LINQ to Objects(上)>主要介绍了LINQ的体系结构.基本语法以及LINQ to Objects中标准查询操作符的使用方法.本篇则主要讨论LINQ to Objects中的扩展方法以及延迟加载等方面的内容. 扩展方法 扩展方法简介 扩展方法能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或其他方式修改原始类型.扩展方法是静态方法,它是类的一部分,但实际没有放在类的源代码当中.下面,我们来看一个简单示例,为上一篇中定义的

LINQ to Objects系列(2)两种查询语法介绍

LINQ为我们提供了两种查询语法,分别是查询表达式和查询方法语法.这篇文章分为以下几个方面进行总结. 1,一个包含两种查询语法的简单示例 2,查询表达式的结构 3,查询方法相关的运算符 一个包含两种查询语法的简单示例 一个LINQ查询既可以使用查询表达式实现,也可以用查询方法实现,还可以同时组合两种查询.下面是一个简单的示例,代码如下. namespace LINQDemo3 { class Program { static void Main(string[] args) { int[] nu

LinQ To Objects 高级查询方法

什么是LinQ To Objects? 用一个例子解释,首先定义一个数组,查询数组中的最大值: int[] arr = { 123, 2, 3, 45, 654, 2324, 897, 56, 6554, 4, 3, 6, 8, 434 }; 旧的方法: int max=0 ; foreach(int a in arr) { if(a>=max) max=a; } Console.Write("最大值:"+ max); LinQ To Objects方法: Console.Wri

Linq之Linq to Objects

目录 写在前面 系列文章 linq to objects 总结 写在前面 上篇文章介绍了linq的延迟加载特性的相关内容,从这篇文章开始将陆续介绍linq to Objects,linq to xml,linq to sql等内容. 系列文章 Linq之Lambda表达式初步认识 Linq之Lambda进阶 Linq之隐式类型.自动属性.初始化器.匿名类 Linq之扩展方法 Linq之Expression初见 Linq之Expression进阶 Linq之Expression高级篇(常用表达式类

Linq之旅:Linq入门详解(Linq to Objects)

示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集成查询).通过LINQ,我们可以使用相同API操作不同的数据源.接下来就让我们看看LINQ是什么以及如何使用? 再此之前,需要先了解的相关技术 1. 隐式类型.匿名类型.对象初始化器 1) 隐式类型,使用var关键字创建,C#编译器会根据用于初始化局部变量的初始值推断出变量的数据类型.(不过我个人认

查询表达式和LINQ to Objects

查询表达式实际上是由编译器“预处理”为“普通”的C#代码,接着以完全普通的方式进行编译.这种巧妙的发式将查询集合到了语言中,而无须把语义改得乱七八糟 LINQ的介绍 LINQ中的基础概念 降低两种数据模型之间的阻抗失配过程中,遇到的一个问题就是,通常会涉及创建另一个模型来作为桥梁 序列 它通过IEnumerable和IEnumerable<T>接口进行封装 序列和其他集合数据结构最大的区别:当你从序列读取数据的时候,通常不知道还有多少数据项等待读取,或者不能访问任意的数据项——只能是当前这个

LINQ to Objects系列(1)相关技术准备

LINQ to Objects是LINQ的一部分,是查询对象集合的一种语法.首先看一下LINQ的体系结构,这样对LINQ有一个大致的了解.如图. 第一篇文章主要是回顾一下学习LINQ to Objects相关的基础知识,主要分为以下几个方面. 1,隐式类型局部变量 2,匿名类型 3,扩展方法 4,对象初始化器 5,集合初始化器 6,Lambda表达式 隐式类型局部变量 隐式类型局部变量,从名字中可以得出两层含义,一是隐式类型,即相对于显式类型(或称为强类型)而言的,指不需要指定具体类型,而是由右

Linq学习随笔一------LINQ to Objects

Linq是Language Integrated Query的简称,它是C# 3.0中新添加的,包含在微软.net framework 3.5,用以简化查询查询操作.它主要包含了3块,Linq to Object.Linq to SQL.Linq to XML,其中Linq to Object和对于对象的查询,Linq to XML则又提供了对XML格式数据的检索.设置等功能,Linq to SQL顾名思义就是针对SQL的功能. 一.LINQ to Objects The term "LINQ