LINQ

LINQ可以和各种类型的数据源一起工作,比如SQL数据库,XML文档等,然而,必须要有实现LINQ查询的代码模块. 这些代码模块叫做LINQ提供程序.

匿名类

var student = new {Lname="hallen",sex="nv",Age=10,Major="history" };

Console.WriteLine("{0} {1} {2} {3}",student.Age,student.Lname,student.Major,student.sex);

Console.ReadKey();

匿名类型只能和局部变量配合使用, 不能用于类成员

由于匿名类型没有名字, 我们必须使用var关键词作为变量类型

from子句

from子句指定了要作为数据源使用数据集合,也引入了迭代变量. 有关from子句的要点:

迭代变量有序表述数据源的每一个元素

from子句的语法如下:

Type是结合中元素的类型,这是可选的,因为编译器可以从集合来推断类型

item是迭代变量的名字

items是要查询的集合的名字, 集合必须是可枚举的

From Type Item in Items

foreach 和 from子句的不同点:

foreach 语句明确指定集合中的项需要按照次序,从第一个到最后一个. 而from子句只是声明性地规定了必须考虑集合中的每一个项,不规定其顺序

join 子句

联结操作接受两个集合然后创建一个临时的对象集合, 每一个对象包含原始集合对象中的所有字段

使用连接来结婚两个或更多集合中的数据

join Identifier in Collection2 on Field1 equals Field2

where 子句

let子句

let子句接受一个表达式的运算并且把它赋值给一个需要在其他运算中使用的标识符

let Identifier = Expression

有关where需要了解如下事项:

只要实在from..let..where部分中,查询表达式可以有任何多个where子句

一个项必须满足where子句才能避免在之后被过滤

orederby子句

接受一个表达式并根据表达式一次返回结果项

使用匿名类型存储LINQ查询结果

匿名类 :

既支持简单类型也支持复杂类型, 简单类型必须是一个非空初始值,复杂类型则是一个以new开头的初始化项

匿名类型的属性是只读的,没有属性设置器,它一旦被初始化就不可更改

如果两个匿名类新的属性值相同,那么就认为两个匿名类型相等

匿名类型可以在循环中用作初始化器

匿名类型支持智能感知

匿名类型可以拥有方法

时间: 2024-11-09 11:22:34

LINQ的相关文章

.NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)

阅读目录: 1.环路执行对象模型.碎片化执行模型(假递归式调用) 2.N层对象执行模型(纵横向对比链式扩展方法) 3.LINQ查询表达式和链式查询方法其实都是空壳子 4.详细的对象结构图(对象的执行原理) 5.IQueryable<T>与IQueryProvider一对一的关系能否改成一对多的关系 6.完整的自定义查询 1]. 环路执行对象模型.碎片化执行模型(假递归式调用) 这个主题扯的可能有点远,但是它关系着整个LINQ框架的设计结构,至少在我还没有搞懂LINQ的本意之前,在我脑海里一直频

.NET深入解析LINQ框架(一:LINQ优雅的前奏)

阅读目录: 1.LINQ简述 2.LINQ优雅前奏的音符 2.1.隐式类型 (由编辑器自动根据表达式推断出对象的最终类型) 2.2.对象初始化器 (简化了对象的创建及初始化的过程) 2.3.Lambda表达式 (对匿名方法的改进,加入了委托签名的类型推断并很好的与表达式树的结合) 2.4.扩展方法 (允许在不修改类型的内部代码的情况下为类型添加独立的行为) 2.5.匿名类型 (由对象初始化器推断得出的类型,该类型在编译后自动创建) 2.6.表达式目录树(用数据结构表示程序逻辑代码) 3.LINQ

.NET深入解析LINQ框架(二:LINQ优雅的前奏)

阅读目录: 1.LINQ框架的主要设计模型 1.1.链式设计模式 (以流水线般的链接方式设计系统逻辑) 1.2.链式查询方法(逐步加工查询表达式中的每一个工作点) 2.LINQ框架的核心设计原理 2.1.托管语言之上的语言(LINQ查询表达式) 2.2.托管语言构造的基础(LINQ依附通用接口与查询操作符对应的方法对接) 2.3.深入IEnumerable.IEnumerable<T>.Enumerable(LINQ to Object框架的入口) 2.4.深入IQueryable.IQuer

.NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)

阅读目录: 1.开篇介绍 2.扩展Linq to Object (应用框架具有查询功能) 2.1.通过添加IEnumerable<T>对象的扩展方法 2.2.通过继承IEnumerable<T>接口 2.3.详细的对象结构图 3.实现IQueryable<T> .IQueryProvider接口 3.1.延迟加载IEnumertor<T>对象(提高系统性能) 3.2.扩展方法的扩展对象之奥秘(this IQueryable<TSource> so

.NET深入解析LINQ框架(三:LINQ优雅的前奏)

阅读目录: 1.动态LINQ查询(动态构建Expression<T>表达式树) 2.DLR动态语言运行时(基于CLR之上的动态语言运行时) 1].动态LINQ查询(动态构建Expression<T>表达式树) 什么是动态LINQ查询?LINQ的编写是静态的,因为C#是基于静态类型系统原理设计的,在编写时已经确定类型,也就是在编译时就已经知道将要执行什么样的查询,条件是什么.排序方式是什么等等.那么很大一部分应用场合中我们需要根据用户的选择来查询数据源,以往我们都是通过判断的方式来拼

.NET深入解析LINQ框架(六:LINQ执行表达式)

阅读目录: 1.LINQ执行表达式 在看本篇文章之前我假设您已经具备我之前分析的一些原理知识,因为这章所要讲的内容是建立在之前的一系列知识点之上的,为了保证您的阅读顺利建议您先阅读本人的LINQ系列文章的前几篇或者您已经具备比较深入的LINQ原理知识体系,防止耽误您的宝贵时间. 到目前为止我们对LINQ的执行原理已经很清楚了,从它的前期构想到它真正为我们所用都有足够的证据,但是似乎问题并没有我们想的那么简单,问题总是在我们使用中频频出现尤其是新技术的使用,当然有问题才能有进步. 一:LINQ执行

应用开发之Linq和EF

上一章笔者对于WinForm开发过程用到的几个知识点做了讲解.笔者们可以以此为开端进行学习.而本章我们来讲一个跟ORM思想有关的知识点.在讲之前让我们想一下关于JAVA的hibernate知识点.hibernate也是ORM框架.记得hibernate里面有一个叫HQL.先不管HQL的好与坏.主要是明白HQL的目地是什么.ORM的思想就是为了让用户在操作数据的时候用上面向对象的思想来看,而不是二维数据了.所以HQL笔者认为就是一个面向对象思想的SQL语句.那么为什么笔者要讲到HQL呢?事实上笔者

Linq to List

var lstMater = lst.GroupBy(w => new { w.materialId, w.name, w.isPass, w.description }). Select(g => new View_El_MyCourse_MaterialInfo { description = g.Key.description, isPass = g.Key.isPass, materialId = g.Key.materialId, name = g.Key.name }).Order

几种查询方法(lambda Linq Enumerable静态类方式)

1.需要一个数据源类: using System; using System.Collections.Generic; namespace Linq { public class Student { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } public class Data { public static List<Student> studentLi

Linq To Nhibernate 性能优化(入门级)

最近都是在用Nhibernate和数据库打交道,说实话的,我觉得Nhibernate比Ado.Net更好用,但是在对于一些复杂的查询Nhibernate还是比不上Ado.Net.废话不多说了,下面讲讲Linq To Nhibernate的性能优化. 第一点:应该要分清楚当前代码是在数据库上执行,还是在内存中执行(或者什么时候应该在数据库上做,什么时候应该在内存做) 我们在在做查询的时候,常见的使用方法 上面是使用了Iqueryable接口的,它会把数据先筛完了之后,再返回给我们 这个在数据库里呢