您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

LINQ是什么,它有什么作用?[关闭]

LINQ是什么,它有什么作用?[关闭]

LINQ代表 语言集成查询

Microsoft语言开发人员没有编写YAQL(又一种查询语言),而是提供了一种直接用其语言(例如C#和Visual Basic)表示查询方法。构成这些查询的技术不依赖于要查询的事物的实现细节,因此您可以针对许多目标(数据库,内存中的对象,XML)编写有效的查询,而实际上无需考虑该查询的底层方式。查询将被执行。

让我们从属于.NET Framework(3.5)的部分开始探索。

LINQ To Objects-检查System.Linq.Enumerable查询方法。这些target IEnumerable<T>,允许以类型安全的方式查询任何类型的loopable集合。这些查询依赖于已编译的.NET方法,而不是表达式。

LINQ To Anything-检查System.Linq.Queryable的某些查询方法。这些目标IQueryable<T>,允许构建可被基础实现转换的表达式树。

表达式树-检查System.Linq.Expressions命名空间。这是代码作为数据。在实践中,您应该意识到这一点,但实际上并不需要针对这些类型编写代码。语言功能(例如lambda表达式)可让您使用各种简写形式来避免直接处理这些类型。

LINQ To sql-检查System.Data.Linq命名空间。特别要注意DataContext。这是C#团队构建的DataAccess技术。它只是工作。

LINQ To Entities-检查System.Data.Objects命名空间。特别要注意ObjectContext。这是ADO.NET团队构建的DataAccess技术。它比LINQ To sql更复杂,功能强大且更难使用。

LINQ To XML-检查System.Xml.Linq命名空间。基本上,人们对中的内容不满意System.Xml。因此,Microsoft重新编写了它,并利用重新编写的优势引入了一些方法,这些方法使对XML使用LINQ To Objects更加容易。

一些不错的帮助程序类型,例如FuncAction。这些类型是具有通用支持的委托。声明您自己的自定义(和不可互换的)委托类型的日子已经一去不复返了。

以上所有内容都是.NET Framework的一部分,可从任何.NET语言(VB.NET,C#,IronPython,COBOL .NET等)获得。

好的,继续讲语言功能。我将坚持使用C#,因为这是我最了解的。VB.NET也有一些类似的改进(还有C#没有得到的-XML文字)。这是一个简短且不完整的清单。

扩展方法-这使您可以“添加”要键入的方法。该方法实际上是传递给该类型的实例的静态方法,并且仅限于该类型的公共协定,但是对于将方法添加到不受控制的类型(字符串)或添加(完全实现)非常有用)接口的辅助方法

查询理解语法-这使您可以使用sql Like结构进行编写。所有这些东西都转换为System.Linq.Queryable或System.Linq.Enumerable上的方法(取决于myCustomers的类型)。它是完全可选的,没有它您也可以很好地使用LINQ。这种查询声明样式的一个优点是范围变量是有范围的:无需为每个子句重新声明它们。

IEnumerable<string> result =

from c in myCustomers where c.Name.StartsWith(“B”) select c.Name;

Lambda表达式-这是指定方法的简写。C#编译器会将每个转换成匿名方法或true System.Linq.Expressions.Expression。您确实需要了解这些内容,才能很好地使用Linq。它由三部分组成:参数列表,箭头和方法主体。

IEnumerable<string> result = myCustomers

.Where(c => c.Name.StartsWith(“B”)) .Select(c => c.Name);`

匿名类型-有时编译器具有足够的信息来为您创建类型。这些类型不是真正的匿名:编译器在创建它们时将其命名。但是这些名称是在编译时创建的,对于开发人员在设计时使用该名称为时已晚。

myCustomers.Select(c => new

{ Name = c.Name; Age = c.Age; })

隐式类型-有时编译器从初始化中获得了足够的信息,可以为您找出类型。您可以使用var关键字指示编译器执行此操作。由于程序员可能不会使用 匿名 类型的名称,因此隐式类型是声明匿名类型的变量所必需的。

// The compiler will determine that names is an IEnumerable<string>

var names = myCustomers.Select(c => c.Name);

其他 2022/1/1 18:15:04 有430人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶