LINQ数据源详细描述
创始人
2024-06-06 11:11:07
0

LINQ有很多值得学习的地方,这里我们主要介绍LINQ数据源,包括介绍LINQ查询表达式等方面。

LINQ数据源

在上一个示例中,由于数据源是数组,因此它隐式支持泛型 IEnumerable<(Of <(T>)>) 接口。这一事实意味着该数据源可以用 LINQ 进行查询。在 foreach 语句中执行查询,而 foreach 要求使用 IEnumerable 或 IEnumerable<(Of <(T>)>)。支持 IEnumerable<(Of <(T>)>) 或派生接口(如泛型 IQueryable<(Of <(T>)>))的类型称为“可查询类型”。

可查询类型不需要进行修改或特殊处理就可以用作 LINQ数据源。如果LINQ源数据还没有作为可查询类型出现在内存中,则 LINQ 提供程序必须以此方式表示源数据。例如,LINQ to XML 将 XML 文档加载到可查询的 XElement 类型中:

  1. // Create a data source from an XML document.  
  2. // using System.Xml.Linq;  
  3. XElement contacts = XElement.Load(@"c:\myContactList.xml"); 

在 LINQ to SQL 中,首先手动或使用 对象关系设计器(O/R 设计器) 在设计时创建对象关系映射。针对这些对象编写查询,然后由 LINQ to SQL 在运行时处理与数据库的通信。在下面的示例中,Customer 表示数据库中的特定表,并且 Table 支持派生自 IEnumerable<(Of <(T>)>) 的泛型 IQueryable<(Of <(T>)>) 接口。

  1. DataContext db = new DataContext(@"c:\northwind\northwnd.mdf"); 

有关如何创建特定类型的数据源的更多信息,请参见各种 LINQ 提供程序的文档。但基本规则非常简单:LINQ数据源是支持泛型 IEnumerable<(Of <(T>)>) 接口或从该接口继承的接口的任意对象。

LINQ查询

查询指定要从数据源中检索的信息。查询还可以指定在返回这些信息之前如何对其进行排序、分组和结构化。查询存储在查询变量中,并用查询表达式进行初始化。为使编写查询的工作变得更加容易,C# 引入了新的查询语法。

上一个示例中的查询从整数数组中返回所有偶数。该查询表达式包含三个子句:from、where 和 select。(如果您熟悉 SQL,您会注意到这些子句的顺序与 SQL 中的顺序相反。) from 子句指定数据源,where 子句应用筛选器,select 子句指定返回的元素的类型。LINQ查询表达式(C# 编程指南)一节中详细讨论了这些子句和其他查询子句。目前需要注意的是,在 LINQ 中,查询变量本身不执行任何操作并且不返回任何数据。它只是存储在以后某个时刻执行查询时为生成结果而必需的信息。有关在幕后是如何构建查询的更多信息,请参见标准查询运算符概述。

【编辑推荐】

  1. LinqDataSource控件剖析
  2. Linq To Sql学习经验
  3. Linq String类型浅析
  4. Linq组合查询之集成数据库语言查询
  5. Linq To SQL输出SQL语句剖析

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...