Transcript Document

LINQ
通用和便利的信息查询方式
http://rippleyong.cnblogs.com
简介
面向对象 (OO) 编程技术
 .NET Language Integrated Query
(LINQ):采用通用方案来解决各种信息
源的访问与整合问题
 语言集成查询使得查询表达式 能够得益
于丰富的元数据、编译时语法检查、静
态输入和智能感知

Language Integrated Query
LINQ表达式
Dim words as String() = _
{"hello", "wonderful", "linq", "beautiful", "world“}
Dim shortWords = _
From word In words _
Where word.Length > 5 _
Select word
标准查询运算符
“标准查询运算符”是组成语言集成查
询 (LINQ) 模式的方法。
 实现了 IEnumerable(Of (T) 接口或
IQueryable(Of (T)) 接口。标准查询运
算符提供了包括筛选、投影、聚合、排
序等功能在内的查询功能

标准常用查询运算符









筛选数据: Where,OfType
投影运算: Select, SelectMany
对数据进行排序: OrderBy, ThenBy
数据分区: GroupBy
限定符运算: Any, All
数据分区: Take, Skip, TakeWhile, SkipWhile
Set 操作: Distinct, Union, Intersect, Except
聚合运算: Count, Sum, Min, Max, Average
转换数据类型: ToArray, ToList, ToDictionary
LINQ执行
确立数据源
 创建查询
 执行查询

DEMO1
LINQ To Objects
VB9-隐式类型本地变量(Local
Type Inference )
Dim Number = 31719
Dim MyName = "Kong“
Dim Area = 1.9
Dim aUser = New User
VB9-对象初始值设置项(Object
Initializers)
Public Class User
Public FirstName As String
Public LastName As String
Public Age As Integer
Public Sub New(ByVal lastName As String)
_LastName = lastName
End Sub
End Class
Dim user= New User With _
{.Age = 30, .FirstName = "Yong", .LastName = "Kong"}
Dim user2 = New User("Kong") With _
{.Age = 8, .FirstName = "Yong}
VB9-匿名类型(Anonymous
Types)
Dim user= New With _
{.Age = 30, .FirstName = "Yong", .LastName = "Kong"}
VB9-扩展方法(Extension
Mehtods)
<System.Runtime.CompilerServices.Extension()> _
Module UserHelper
<System.Runtime.CompilerServices.Extension()> _
Public Function GetUserName(ByVal user As User) As String
Return String.Format("your Name:{0} {1}", _
user.FirstName ,user.LastName)
End Function
End Module

参数它表明了扩展方法与类之间的关系,这个参数是什么类型,这个方法就会被扩
展到对应类型的实例上.
Dim user = New User("Kong", "Kong") With {.Age = 8}
Dim userName = user.GetUserName()

参数:调用方法的参数总比扩展方法的参数少1个,因为扩展方法的第1个参数,
用于确定扩展方法与要扩展的类之间的关系
VB9-Lambda表达式(Lambda
Expressions)
简单的Lambda表达式
Dim lambda1 = Function(x) x + 1
' Implicitly typed
Dim lambda2 = Function(x As Integer) x + 1 ' Explicitly typed
Dim lambda3 = Function(x, y) x * y
' Multiple parameters
Dim lambda4 = Function() 1
' No parameters

泛型委托
Dim upperImplicit As Func(Of String, String) = Function(s)
s.ToUpper()

LINQ To SQL-介绍



LINQ to SQL 是 .NET Framework 3.5 版的
一个组件,提供了用于将关系数据作为对象
管理的运行时基础结构。
在 LINQ to SQL 中,关系数据库的数据模型
映射到用开发人员所用的编程语言表示的对
象模型。
当应用程序运行时,LINQ to SQL 会将对象
模型中的语言集成查询转换为 SQL,然后将
它们发送到数据库进行执行。当数据库返回
结果时,LINQ to SQL 会将它们转换回您可
以用您自己的编程语言处理的对象。
LINQ To SQL-重要概念

数据上下文(DataContext)
– System.Data.Linq命名空间下的重要类型,用于把查询句法
翻译成SQL语句,以及把数据从数据库返回给调用方和把实
体的修改写入数据库
– DataContext提供了以下一些使用的功能:



以日志形式记录DataContext生成的SQL
执行SQL(包括查询和更新语句)
创建和删除数据库
– DataContext是实体和数据库之间的桥梁

实体类(Entity Classes)
DEMO 2
LINQ To SQL
LINQ To XML-介绍
LINQ to XML 经过了重新设计,是最
新的 XML 编程方法。
 它提供文档对象模型 (DOM) 的内存文
档修改功能,支持 LINQ 查询表达式。
尽管这些查询表达式在语法上与 XPath
不同,但它们以更加类型化的方式提供
类似的功能。

LINQ To XML-重要概念



XDocument 类
– 包含有效的 XML 文档所需的信息。 其中包括
XML 声明、处理指令和注释
XElement 类
– 表示一个 XML 元素。 可以使用该类创建元素;
更改元素内容;添加、更改或删除子元素;向元
素中添加属性;或以文本格式序列化元素内容。
XAttribute 类
– 属性是与元素关联的名称/值对。 XAttribute 类
表示 XML 属性。
DEMO 3
LINQ To XML
LINQ学习工具


LINQPad :LINQPad 是一个很好的学习LINQ的工
具,LINQPad 是完全免费的,无需安装, 《C# 3.0
in a Nutshell》一书中200个示例
VLinq :Visual Linq Query Builder(LINQ可视化
查询编辑器)作为Visual Studio 2008的一个插件,
可以帮助我们在程序中创建LINQ to SQL查询表达式,
支持C#和VB两种语言
LINQ资源






LINQ in Action 电子书:作者:Fabrice Marguerie, Steve Eichert,
Jim Wooley 网址: http://linqinaction.net
The LINQ Project(LINQ 项目)站点位于 MSDN 上,提供了有关
LINQ 的一般新闻和信息。
Visual Basic Developer Center(Visual Basic 开发人员中心),提
供了有关结合使用 LINQ 和 Visual Basic 的最新新闻。
C# Developer Center(C# 开发人员中心),提供了有关 C# 3.0 规
范的最新版本及其他信息。
LINQ forum(LINQ 论坛)位于 MSDN 上,是提出有关 LINQ 的问
题的最佳地方。
白皮书提供了指向提供有关 LINQ 的其他信息的白皮书的链接。
THANKS