LinQ教程

世界各地的开发者总是遇到查询的问题,因为缺乏一个定义的路径的数据,并需要掌握的技术,如SQL,Web服务的XQuery等。

在Visual Studio 2008中引入,由Anders Hejlsberg设计LINQ(语言集成查询)允许编写查询,即使没有查询语言,如SQL,XML等知识 LINQ查询,可以由不同的数据类型来写。

LINQ查询示例

C#

using System;
using System.Linq;

class Program
{
  static void Main()
  {
     string[] words = {"hello", "wonderful", "LINQ", "beautiful", "world"};
  	 //Get only short words
	 var shortWords = from word in words
	                  where word.Length <= 5
	                  select word;
	    
	 //Print each word out
	 foreach (var word in shortWords)
	 {
	 	Console.WriteLine(word);
	 }	 
	 Console.ReadLine();
  }
}

VB

Module Module1
  Sub Main()
     Dim words As String() = {"hello", "wonderful", "LINQ", "beautiful", "world"}
     
     ' Get only short words
     Dim shortWords = From word In words _
                      Where word.Length <= 5 _
                      Select word
     
     ' Print each word out.
     For Each word In shortWords
        Console.WriteLine(word)
     Next
     Console.ReadLine()
  End Sub
End Module	

当C#或VB将上述代码被编译和执行时,它产生了以下结果:

hello 
LINQ 
world

LINQ的语法

LINQ有两种语法。这些是以下物质。

  • Lamda (方法) 语法

    示例

    var longWords = words.Where( w => w.length > 10);
    Dim longWords = words.Where(Function(w) w.length > 10)
  • Query (理解) 语法

    示例

    var longwords = from w in words where w.length > 10;
    Dim longwords = from w in words where w.length > 10

LINQ的类型

LINQ的类型在下面简要提及。

  • LINQ 到 Objects
  • LINQ 到XML(XLINQ)
  • LINQ 到 DataSet
  • LINQ 到 SQL (DLINQ)
  • LINQ 到 Entities

除上述外,还有一个名为PLINQ一个LINQ类型,这是微软并行LINQ。

在.NETLINQ体系结构

LINQ有3层架构,其中最上层是由语言扩展和底层组成,通常对象实现了IEnumerable<T>或IQueryable的<T>泛型接口的数据源。该体系结构如下图。

LINQ Architecture

查询表达式

查询表达式不过是一个LINQ查询,表示类似于SQL的查询使用操作符,如select,Where 和 OrderBy的一种形式。查询表达式通常开始以关键字“From”。

访问标准的LINQ查询操作符,命名空间System.Query默认情况下应导入。这些表达式都写在C#3.0声明性查询语法。

下面是一个例子来说明它由数据源创建一个完整的查询操作,查询表达式定义和查询执行。

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Operators
{
  class LINQQueryExpressions
  {
     static void Main()
     {
        // Specify the data source.
        int[] scores = new int[] { 97, 92, 81, 60 };

        // Define the query expression.
        IEnumerable<int> scoreQuery = from score in scores
                                            where score > 80
                                            select score;

           // Execute the query.
           foreach (int i in scoreQuery)
           {
              Console.Write(i + " ");
           }
           Console.ReadLine();
     }
  }
}

当上述代码被编译和执行时,它产生了以下结果:

97 92 81

扩展方法

引入.NET3.5,扩展方法只有静态类中声明,并允许包含自定义方法的对象进行一些精确的查询操作来扩展类,而不由这个类的实际成员。这些也可以被重载。

简而言之,扩展方法被用来转换查询表达式为传统的方法调用(面向对象)。

LINQ和存储过程的区别

还有就是LINQ和存储过程之间存在差异的数组。这些差别将在下面提及。

  • 存储过程比LINQ查询速度更快,因为它们遵循预期的执行计划。

  • 在比较执行LINQ查询这很容易避免,而不是存储过程作为前者在编译时Visual Studio的智能提示支持,以及全类型检查运行时错误。

  • LINQ允许调试通过使用.NET调试器不是在存储过程。

  • LINQ提供了相对于存储过程,其中有必要重新写为数据库类型多样的代码的多个数据库的支持。

  • LINQ基于解决方案的部署是容易和简单,相比部署一套存储过程。

LINQ的需要

在此之前LINQ,有必要学习C#,SQL,和各种API结合在一起既要形成一个完整的应用程序。因为,这些数据源和编程语言面临的阻抗不匹配;需要短编码的感觉。

下面是在查询数据的LINQ来临之前有多少不同的技术中使用由开发的一个例子。

SqlConnection sqlConnection = new SqlConnection(connectString);
SqlConnection.Open();
System.Data.SqlClient.SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = "Select * from Customer";
return sqlCommand.ExecuteReader (CommandBehavior.CloseConnection)  

有趣的是,出了特征代码行,查询获取只有最后两个定义。使用LINQ,相同的数据的查询可以写成一个可读颜色编码形式象,如下面那太在很短提下列到之一。

Northwind db = new Northwind(@"C:\Data\Northwnd.mdf");
var query = from c in db.Customers
            select c;

LINQ的优点

LINQ提供了一系列的优势,其中最重要的是其强大的表达能力,使开发表达声明。一些LINQ的优点如下。

  • LINQ提供语法高亮,证明有助于找出在设计时的错误。

  • LINQ提供智能感知这意味着很容易写更精确的查询。

  • 写LINQ代码是相当快的,因此开发时间也被显著减少。

  • LINQ使得调试方便,因为它在C#语言的集成。

  • 两个表之间的关系看很容易使用LINQ由于其分层特征,这使得编写查询在更短的时间加入多个表。

  • LINQ允许一个单一的LINQ语法的使用,同时查询多个不同的数据源,这是主要是因为其统一的基础。

  • LINQ是可扩展的,这意味着有可能使用LINQ的知识来查询新的数据源类型。

  • LINQ提供了一个查询连接多个数据源,以及突破复杂问题转换为一组短的查询易于调试的工具。

  • LINQ提供易于改造转换一种数据类型到另一种,如SQL数据转换为XML数据。


猿狮妹
2022-11-26
LinQ教程 在线教程
热门教程
1 LinQ教程 LINQ是语言集成查询的缩写。微软的查询语言是完全集成,并提供从内存中的对象,数据库,XML文档和许多方便的数据访问。它是通过一组扩展,LINQ巧妙地融合C#和Visual Basic查询。
2 LINQ过滤运算符 过滤运算符 过滤是一种操作,以限制结果设定为使得它仅选定元素满足特定的条件。 运算符 描述 C# 查询表达式语法 VB 查询表达式语法 Where 基于谓词函数过滤值 where Where OfType 基于过
3 LINQ Join操作 连接是指其中有困难的数据源,以跟随在一个直接的方式相互关系的目标的操作。 运算符 描述 C#查询表达式语法 VB查询表达式语法 Join 运算符连接两个序列匹配键的基础 join in on equa
4 LINQ Set操作 集合操作 在四个操作符的集合操作中,每个产生基于不同的标准的结果。 操作 描述 C#查询表达式语法 VB查询表达式语法 去重 结果:从集合唯一值的列表通过过滤重复的数据,如果有
5 LINQ转换操作 运算符改变输入对象的类型,并在多种不同的应用范围中使用。 查看示例 操作 描述 C#查询表达式语法 VB查询表达式语法 AsEnumerable 返回输入类型为IEnumerableT 不适用 不适用 AsQueryable (
6 LINQ聚合 聚合 执行任何类型的所需的聚合,并允许在创建自定义LINQ聚合。 操作 描述 C#查询表达式语法 VB查询表达式语法 Aggregate 对集合的值进行操作执行自定义聚合操作 不适用 不适用 Averag
7 LINQ环境安装设置 开始LINQ程序之前,最好先了解设立LINQ环境的细微差异。 LINQ需要.NET框架,一种革命性的平台有不同类型的应用程序。 LINQ查询可以写成无论是在C#或Visual Basic都很方便。 微软提供了这
8 LINQ投影操作 投影是在其中一个对象被变换成仅特定性能一种全新的形式的操作。 运算符 描述 C#查询表达式语法 VB查询表达式语法 Select 操作转换函数的基础项目值 select Select SelectMany 操作项目的值
9 LINQ排序运算符 排序运算符 排序操作允许基于一个序列中的元素上的单个或多个属性排序。 操作符 描述 C#查询表达式语法 VB查询表达式语法 OrderBy 按升序操作排序值 orderby Order By OrderByDescending 降序排
10 LINQ分组操作 运算符将数据基于一个共同的共享属性放入一些分组 操作 描述 C#查询表达式语法 VB查询表达式语法 GroupBy 组织项目的顺序组,并将其返回IEnumerable类型的集合IGroupingkey, element group by -
  • Copyright © 2021 猿狮院, All rights reserved.