关于c#:什么是LINQ,它有什么作用?

What is LINQ and what does it do?

什么是LINQ?我知道它是用于数据库的,但是它做什么呢?


Linq代表语言集成查询。好的。

微软语言开发人员没有编写yaql(又一种查询语言),而是提供了一种直接用其语言(如C和VisualBasic)表示查询的方法。形成这些查询的技术不依赖于所查询对象的实现细节,因此您可以针对许多目标(数据库、内存中的对象、XML)编写有效的查询,而实际上不考虑执行查询的底层方式。好的。

让我们从属于.NET框架(3.5)的部分开始本次探索。好的。

  • Linq to Objects-检查System.Linq.Enumerable中的查询方法。这些目标IEnumerable允许以类型安全的方式查询任何类型的可循环集合。这些查询依赖于已编译的.NET方法,而不是表达式。好的。

  • linq to anything-检查system.linq.queryable中的某些查询方法。这些目标是IQueryable,允许构造表达式树,这些树可以通过底层实现进行转换。好的。

  • 表达式树-检查System.Linq.Expressions命名空间。这是代码作为数据。在实践中,您应该了解这些东西,但实际上不需要针对这些类型编写代码。语言特性(如lambda表达式)允许您使用各种短指针来避免直接处理这些类型。好的。

  • linq to sql-检查system.data.linq命名空间。特别要注意DataContext。这是由C小组构建的数据访问技术。它只是工作。好的。

  • linq to entities-检查system.data.objects命名空间。特别要注意ObjectContext。这是ADO.NET团队构建的数据访问技术。它比Linq to SQL复杂、强大,而且更难使用。好的。

  • linq to xml-检查system.xml.linq命名空间。从本质上讲,人们对System.Xml中的内容并不满意。因此,微软重新编写了它,并利用重新编写引入了一些方法,使得使用Linq-to对象对XML更容易。好的。

  • 一些不错的助手类型,如func和action。这些类型是具有一般支持的委托。声明自己的自定义(和不可交换)委托类型的日子一去不复返了。好的。

以上所有内容都是.NET框架的一部分,可以从任何.NET语言(vb.net、c、ironpython、cobol.net等)获得。好的。

好的,关于语言特性。我会坚持C,因为这是我最了解的。vb.net也有一些类似的改进(还有一些c没有得到-xml文本)。这是一份简短而不完整的清单。好的。

  • 扩展方法-这允许您向类型"添加"一个方法。该方法实际上是一个静态方法,它传递了该类型的实例,并且仅限于该类型的公共约定,但对于向不控制的类型(字符串)添加方法或向接口添加(完全实现的)助手方法非常有用。好的。

  • 如您觉得此内容不合适,请登录并向我们举报此内容。All of this stuff gets translated to the methods on system.linq.queryable or system.linq.enumerable(depending on the type of mycustomers).这是完全可选的,没有它,你可以使用链接。这类声明的一个优点是,范围变量的范围很大:它们不需要为每一条款重新声明。

    okay.

    1
    2
    3
    4
    IEnumerable<string> result =
     from c in myCustomers
     where c.Name.StartsWith("B")
     select c.Name;
  • Lambda expressions-this is a shorthand for specifing a method.编译器将把每一个编译器转换成一个匿名方法或一个真实的System.Linq.Expressions.Expression。你真的需要了解他们的用处。有三个部分:参数列表、箭头和方法体。

    okay.ZZU1

  • 匿名类型-有时候编译器有足够的信息为你创建一个类型。这些人不是真正的匿名者:编译者在制作他们时的名字。但这些名字是在编译时间制作的,对于一个开发者来说,这是太晚了,以便在设计时间使用它。

    okay.

    1
    2
    3
    4
    5
    myCustomers.Select(c => new
    {
      Name = c.Name;
      Age = c.Age;
    })
  • Implicit types-sometimes the compiler has enough information from an initiatization that it can figure out the type for you.你可以用Var关键词指示编译器这样做。Inplicit typing is required to declare variables for anonymous types,since programmers may not use the name of an anonymous type.

    okay.

    1
    2
    // The compiler will determine that names is an IEnumerable<string>
    var names = myCustomers.Select(c => c.Name);

好吧


语言集成查询(LINQ)可以指:

  • a图书馆收藏和迭代器的操作让广泛使用高阶函数作为参数(system.linq)

  • a大学图书馆为传递和操作简单的抽象语法树(用作system.linq.expressions)

  • a语法扩展到提供各种语言的语法处理SQL样的收藏,更紧凑的表示的匿名函数,和一个辅助函数syntactically机制或静态数据成员从最终indistinguishable

  • 在接口定义,数据供应商可以在收到符合订单查询执行和优化结构上的挑战,或有自己的兼容数据提供商

组件可以用在隔离或合并。


在一nutshell,LINQ(语言集成查询)查询可以让你直接在你的代码写的。这些查询可以在关系数据库中的XML,但也对存储容器或对象,如数组和列表。更多信息可在MSDN库是:http://。/en-US /图书馆/ bb308959.aspx


我会尝试一个简单的答案:"你是一个LINQ查询方式的数据库(或其他数据存储,XML等)使用类似于SQL的查询语言,但它是可以编译在。NET应用程序。


LINQ是一个技术提取数据使用成语#衍生从C编程语言。当它owes多功能设计到SQL,它是从根本上自己的数据查询语言。它在宽谱源在A(SQL数据库,数据在内存中的表示、XML等)。LINQ to SQL,特别是湖泊,应作为一个比较传统的嵌入式SQL的使用是从什么suffers经常被称为"阻抗失配"之间的SQL编程# / C和VB编程。

一个讨论of LINQ和它的限制,你可能想要看看这一相关问题:LINQ to SQL小姐不好点?


语言集成查询(LINQ的状态和方式,是一个提供一通用的"查询"机制在CLR。

在它最基本的层次,这一套方法包括对IEnumerable<T >例如,SELECT和WHERE,这可以用于预测的限制,等[ 1 ]

把它一位新的LINQ的继续,因此LINQ提供者定义的模型可以使用,以表达的树和它的运行对数据源的查询"本土"在CLR以外的例如,LINQ to SQL,NHibernate的LINQ to XML、LINQ等。

# VB.NET和C是这样的查询语法允许你定义一个内联型查询如何写(这看起来很类似于SQL编译器先生),其中,然后到等效IEnumerable<t >电话。

我最有趣的一件事,都是# LINQ的C和VB.NET的功能,这是需要支持的信息是有用的在自己的权利。延伸的方法,匿名类型的lambda表达式,和所需的内隐表征都支持LINQ的那些特征,但可以使用LINQ的上下文A以外的纯。

这些条件是关系〔1〕,程序员可能会喜欢的功能的地图,减少褶皱,等等。


http://。//aa904594.aspx netframework en-US

LINQ是一个代号为"Project for a set of扩展到.NET Framework,encompass语言集成查询,设置,和变换操作。它#扩展C和Visual Basic与本地语言语法的查询和利用提供的类库到论文的能力。"