什么是LINQ

Posted 是小叶的呢.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是LINQ相关的知识,希望对你有一定的参考价值。

在关系型数据库系统中,数据被组织 放入规范化很好的表中,并且通过简单而又 强大的语言SQL来进行访问。SQL可以和数据库中的任何数据配合使用,因为数据被放入表中,并遵从一些严格的规则。
然而人,在程序却与数据库相反,保存在类对象或结构中的数据差异很大。因此,没有通用的查询语言来从数据结构中获取数据。从对象获取的方法一直都是作为程序的一部分而设计的。然而使用LINQ可以很轻松地查询对象集合。
如下是LINQ的重要高级特性。
1、 LINQ代表语言集成查询。
2、 LINQ是.NET框架的扩展,它允许我们以使用SQL查询数据库的方式来查询数据集合。
3、 使用LINQ,你可以从数据库、程序对象的集合以及XML文档中查询数据。
如下代码演示了一个简单的使用LINQ的示例。在这段代码中,被查询的数据源是简单的int数组。语句中查询的定义就是from和select关键字。尽管 查询在语句中定义,但直到最后的foreach语句请求其结果的时候才会执行。

LINQ提供程序
在之前的实例中,数据源只是int数组,它是程序在内存中的对象。然而,LINQ还可以和各种类型的数据源一起工作。比如SQL数据库、XML文档,等等。然而,对于每一种数据源类型,在其背后一定有根据该数据源类型实现LINQ查询的代码模块。这些代码模块叫做LINQ提供程序。有关LINQ提供程序的要点如下:
1、 微软为一些常见的数据源类型提供了LINQ提供程序,如下图所示。
2、 我们 可以使用任何支持LINQ的语言(在这里是C#)来查询有 LINQ提供程序的数据源类型。
3、 第三方在不断提供针对各种数据源类型的LINQ提供程序。

有很多介绍LINQ的各种形式和细节的专著,毫无疑问,这些内容超过了本章讨论的范围。在本章中,我们会介绍LINQ并解释如何将其用于程序对象和XML。
匿名类型
在介绍LINQ查询特性的细节之前,让我们首先学习一个允许我们创建无名类类型的特性。不足为奇,它叫做匿名类型。匿名类型经常用于LINQ查询的结果之中。
第6章介绍了对象初始化语句,它允许我们在使用对象创建表达式时初始化新类实例的字段和属性。只是提醒一下 ,这种形式的对象创建表达式由三部分组成:new关键字、类名或构造函数以及对象初始化语句对象初始化语句在一组大括号内包含了以逗号分隔的成员初始化列表。
创建匿名类型 的变量使用相同的形式,但是没有类名和构造函数。如下的代码行演示了 匿名类型的对象创建表达式:

如下代码给出了一个创建和使用匿名类型的实例。他创建了一个叫做student的变量,这是一个有string属性和一个int属性的匿名类型。注意,在WriterLine语句中 ,可以像访问具名类型的成员那样访问实例的成员。

需要了解的有关匿名类型的重要事项如下。
1、 匿名类型只能 和局部变量配合使用,不能用于类成员。
2、 由于匿名类型没有名字,我们必须使用var关键字作为变量类型。
3、 不能设置匿名类型对象的属性。编译器为匿名类型创建的属性是只读的。
当编译器遇到匿名类型的对象初始化 语句时,他创建了一个有名字的新类型。对于每一个成员初始化语句,他推断其类型并创建一个只读属性来访问 它的值。属性和成员 初始化语句具有相同的名字。匿名类型被构造后,编译器创建了这个类型的对象。
除了对象初始化语句的赋值形式,匿名类型的对象初始化语句还有其他两种允许的形式:简单标识符和成员访问表达式。这两种形式叫做投影初始化语句。下面的变量声明演示了所有的3种形式。第一个成员初始化语句是赋值形式,第二个是成员 访问表达式,第三个是标识符 形式。

刚才演示的映射初始化语句形式和这里给出的赋值形式的结果一样:
Var student= new {Age = Age,Name=Other.Name,Major=Major};
如果编译器遇到了另一个具有相同 的参数名 、相同的推断类型和相同顺序的匿名类型,他会重用这个类型并直接创建新的实例,不会创建新的匿名类型。

以上是关于什么是LINQ的主要内容,如果未能解决你的问题,请参考以下文章

C#中的LINQ

LINQ简介

C#开始使用 LINQ

linQ!!增删改查 好用!

.NET知识梳理——7.Linq

.NET知识梳理——7.Linq