语言集成查询 (LINQ) 是 Visual Studio 2008 中引入的一组功能,可为 C# 和 Visual Basic 语言语法提供强大的查询功能。 LINQ 引入了标准易学的数据查询和更新模式,可以扩展该方法来支持任何类型的数据存储。 Visual Studio 包括 LINQ 提供程序集,后者支持将 LINQ 与 .NET Framework 集合、SQL Server 数据库、ADO.NET 数据集和 XML 文档结合使用。
LINQ特有的编程结构:
- 隐式类型本地变量:C#的var关键字允许定义不显式指定实际数据类型的本地变量。不过由于编译器将根据初始值推断其数据类型,所有该变量仍然是强类型的。
- 对象和集合初始化语法:它允许我们在创建类或结构变量的同时设置其属性。
- Lambda表达式:C#Lambda操作符(=>)可以用来构建Lambda表达式,并且在调用以强类型的委托作为参数的方法时,也十分有用。
- 扩展方法:C#扩展方法不使用子类就能够像已知类中添加新的功能。同样,它还可以向不能有子类的密封类和结构中添加新的功能。在编写扩展方法时,第一个参数必须使用this限定符,用来表示被扩展的类型。扩展方法只能定义在静态类中,并且必须使用static关键字声明为静态方法。
- 匿名类型:该特性可以快速建立数据的“结构”,编译器将根据名称/值对的结合在编译时生成新的类。该类型是基于值的语义构建的,因此System.object中的每个虚方法都要重写。要定义一个匿名类型,可以声明一个隐式类型变量,并使用对象初始化语法指定数据的结构。
图是从Linq In Action 中截的。
下面介绍下Linq To Object:(查询内存中的集合)
这是我们查询所用的数据源,(Linq To Action中的)
using System; using System.Collections.Generic; using System.Text; namespace LinqInAction.LinqBooks.Common { static public class SampleData { static public Publisher[] Publishers = { new Publisher {Name="FunBooks"}, new Publisher {Name="Joe Publishing"}, new Publisher {Name="I Publisher"} }; static public Author[] Authors = { new Author {FirstName="Johnny", LastName="Good"}, new Author {FirstName="Graziella", LastName="Simplegame"}, new Author {FirstName="Octavio", LastName="Prince"}, new Author {FirstName="Jeremy", LastName="Legrand"} }; static public Subject[] Subjects = { new Subject {Name="Software development"}, new Subject {Name="Novel"}, new Subject {Name="Science fiction"} }; static public Book[] Books = { new Book { Title="Funny Stories", Publisher=Publishers[0], Authors=new[]{Authors[0], Authors[1]}, PageCount=101, Price=25.55M, PublicationDate=new DateTime(2004, 11, 10), Isbn="0-000-77777-2", Subject=Subjects[0] }, new Book { Title="LINQ rules", Publisher=Publishers[1], Authors=new[]{Authors[2]}, PageCount=300, Price=12M, PublicationDate=new DateTime(2007, 9, 2), Isbn="0-111-77777-2", Subject=Subjects[0] }, new Book { Title="C# on Rails", Publisher=Publishers[1], Authors=new[]{Authors[2]}, PageCount=256, Price=35.5M, PublicationDate=new DateTime(2007, 4, 1), Isbn="0-222-77777-2", Subject=Subjects[0] }, new Book { Title="All your base are belong to us", Publisher=Publishers[1], Authors=new[]{Authors[3]}, PageCount=1205, Price=35.5M, PublicationDate=new DateTime(2006, 5, 5), Isbn="0-333-77777-2", Subject=Subjects[2] }, new Book { Title="Bonjour mon Amour", Publisher=Publishers[0], Authors=new[]{Authors[1], Authors[0]}, PageCount=50, Price=29M, PublicationDate=new DateTime(1973, 2, 18), Isbn="2-444-77777-2", Subject=Subjects[1] } }; } }