目前本人收集的最全的LINQ入门资料~~大家一起LINQ吧

更新时间:2023-05-23 00:50:02 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

收集的最全的LINQ入门资料

入门教程系列1

Linq to Sql(一):DataContext与实体

Linq to Sql(二):增删改

Linq to Sql(三):查询句法

Linq to Sql(四):存储过程

Linq to Sql(五):探究特性

Linq to Sql(六):并发与事务

Linq to Sql(七):继承与关系

Linq to sql(八):其它

入门教程系列2

LINQ体验(1)——Visual Studio 2008新特性

我平时利用课余零碎时间来学习3.5、LINQ、Silverlight、3.5Extensions等新东西,通过笔记形式来记录自己所学的历程,也给大家一起学习Visual Studio 2008和.NET3.5提供一个平台,为保证此系列的完整性,我打算先依次介绍一下C#3.0新语言特性和改进,然后从一条一条LINQ语句分析来贯穿LINQ的知识点……

LINQ体验(2)——C# 3.0新语言特性和改进(上篇)

LINQ体验(3)——C# 3.0新语言特性和改进(下篇)

LINQ体验(4)——LINQ简介和LINQ to SQL语句之Where

LINQ是LanguageIntegratedQuery的简称,它是集成在.NET编程语言中的一种特性。已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰富的元数据,智能感知、静态类型等强类型语言的好处。并且它同时还使得查询可以方便地对内存中的信息进行查询而不仅仅只是外部数据源。…

LINQ体验(5)——LINQ to SQL语句之Select/Distinct和Count/Sum/Min/Max/Avg

LINQ体验(6)——LINQ to SQL语句之Join和Order By

LINQ体验(7)——LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains

我们继续讲解LINQ to SQL语句,这篇我们来讨论Group By/Having操作符和Exists/In/Any/All/Contains操作符。……

LINQ体验(8)——LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods

我们继续讲解LINQ to SQL语句,这篇我们来讨论Union All/Union/Intersect操作和Top/Bottom操作和Paging操作和SqlMethods操作 。……

LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作

这篇我们来讨论LINQ的Insert/Update/Delete操作。这个在我们的程序中最为常用了。我们直接看例子。……

LINQ体验(10)——LINQ to SQL语句之开放式并发控制和事务

从今天开始继续这个系列。告诉大家一个好消息:微软于2月1日发布了Visual Studio Team System2008TeamSuite简体中文版,您可以在这里下载Visual Studio Team System 2008TeamSuite简体中文版90天试用版。今天简单的学习下开放式并发控制和事务的内容,

收集的最全的LINQ入门资料

具体详细的内容现在可以参看MSDN了。

LINQ体验(11)——LINQ to SQL语句之Null语义和String/DateTime方法

在本系列中,主要介绍LINQtoSQL基础的东西,因为LINQ太强大了,它对我们平常使用不同的数据源有着不同的内容,其包括对于SQLServer 数据库的LINQtoSQL;对于XML 文档的LINQ to XML;对于 数据集的LINQtoDataSet;对于.NET集合、文件、字符串等的LINQ to Objects。

LINQ体验(12)——LINQ to SQL语句之对象标识和对象加载

实际上,通常我们是将数据从数据库中提取出来放入另一层中,应用程序在该层对数据进行处理。这就是 LINQtoSQL支持的模型。将数据作为行从数据库中提取出来时,你不期望表示相同数据的两行实际上对应于相同的行实例。如果您查询特定客户两次,您将获得两行数据。每一行包含相同的信息。

LINQ体验(13)——LINQ to SQL语句之运算符转换和与LINQ to SQL

LINQ体验(14)——LINQ to SQL语句之存储过程

在我们编写程序中,往往需要一些存储过程,在LINQ to SQL中怎么使用呢?也许比原来的更简单些。下面我们以NORTHWND.MDF数据库中自带的几个存储过程来理解一下。 LINQ体验(15)——LINQ to SQL语句之用户定义函数

我们可以在LINQ to SQL中使用用户定义函数。只要把用户定义函数拖到O/R设计器中,LINQtoSQL自动使用FunctionAttribute属性和ParameterAttribute属性(如果需要)将其函数指定为方法。这时,我们只需简单调用即可。

LINQ体验(16)——LINQ to SQL语句之DataContext

DataContext作为LINQ to SQL框架的主入口点,为我们提供了一些方法和属性,本文用几个例子说明DataContext几个典型的应用。

LINQ体验(17)——LINQ to SQL语句之动态查询

LINQ体验(18)——LINQ to SQL语句之视图和继承支持

我们使用视图和使用数据表类似,只需将视图从“服务器资源管理器/数据库资源管理器”拖动到O/R设计器上,自动可以创建基于这些视图的实体类。我们可以同操作数据表一样来操作视图了。这里注意:O/R设计器是一个简单的对象关系映射器,因为它仅支持 1:1 映射关系。

收集的最全的LINQ入门资料

Linq to Sql(一):DataContext与实体

DataContext

DataContext类型(数据上下文)是System.Data.Linq命名空间下的重要类型,用于把查询句法翻译成SQL语句,以及把数据从数据库返回给调用方和把实体的修改写入数据库。

DataContext提供了以下一些使用的功能:

以日志形式记录DataContext生成的SQL

执行SQL(包括查询和更新语句)

创建和删除数据库

DataContext是实体和数据库之间的桥梁,那么首先我们需要定义映射到数据表的实体。

定义实体类

收集的最全的LINQ入门资料

以Northwind数据库为例,上述Customers类被映射成一个表,对应数据库中的 Customers表。然后在类型中定义了三个属性,对应表中的三个字段。其中,CustomerID字段是主键,如果没有指定Column特性的Name属性,那么系统会把属性名作为数据表的字段名,也就是说实体类的属性名就需要和数据表中的字段名一致。

现在,创建一个页面,然后在页面上加入一个GridView控件,使用下面的代码进行绑定数据:

收集的最全的LINQ入门资料

使用DataContext类型把实体类和数据库中的数据进行关联。你可以直接在DataContext的构造方法中定义连接字符串,也可以使用

IDbConnection:

之后,通过GetTable获取表示底层数据表的Table类型,显然,数据库中的Customers表的实体是Customer类型。随后的查询句法,即使你不懂SQL应该也能看明白。从Customers表中找出CustomerID以“A”开头的记录,并把CustomersID、Name以及City封装成新的匿名类型进行返回。 结果如下图:

收集的最全的LINQ入门资料

强类型DataContext

强类型数据上下文使代码更简洁:

DataContext其实封装了很多实用的功能,下面一一介绍。

日志功能

收集的最全的LINQ入门资料

运行程序后在网站所在目录生成了log.txt,每次查询都会把诸如下面的日志追加到文本文件中:

应该说这样的日志对于调试程序是非常有帮助的。

探究查询

收集的最全的LINQ入门资料

在这里,我们通过DataContext的GetCommand方法获取了查询对应的DbCommand,并且输出了CommandText和所有的DbParameter。之后,我们又通过GetChangeSet方法获取了修改后的实体,并输出了修改内容。

执行查询

收集的最全的LINQ入门资料

前一篇文章已经说了,虽然Linq to sql能实现90%以上的TSQL功能。但是不可否认,对于复杂的查询,使用TSQL能获得更好的效率。因此,DataContext类型也提供了执行SQL语句的能力。代码的执行结果如下图:

创建数据库

收集的最全的LINQ入门资料

这段代码在数据库中创建了名为testdb的数据库,等同于下面的脚本:

收集的最全的LINQ入门资料

同时,DataContext还提供了DeleteDatabase()方法,在这里就不列举了。

使用DbDataReader数据源

你同样可以选择使用DataReader获取数据,增加了灵活性的同时也增加了性能。

看到这里,你可能会觉得手工定义和数据库中表对应的实体类很麻烦,不用担心,VS2008提供了自动生成实体类以及关系的工具,工具的使用

收集的最全的LINQ入门资料

将在以后讲解。今天就讲到这里,和DataContext相关的事务、加载选项、并发选项以及关系实体等高级内容也将在以后讲解。

Linq to Sql(二):增删改

示例数据库

在数据库中创建一个名为GuestBook的数据库,在里面创建一个tbGuestBook的表,结构如上表。

收集的最全的LINQ入门资料

生成实体类

右键点击网站项目,选择添加新项,然后选择“Linq to sql Classes”,命名为GuestBook。然后打开App_Code里面的GuestBook.dbml。设计视图上的文字提示你可以从服务器资源管理器或者攻击箱拖动项到设计界面上来创建实体类。

那么,我们就在服务器资源管理器中创建一个指向GuestBook数据库的数据连接,然后把tbGuestBook表拖动到GuestBook.dbml的设计视图上,按CTRL+S保存。打开GuestBook.designer.cs可以发现系统自动创建了GuestBook数据库中tbGuestBook表的映射,如下图:

收集的最全的LINQ入门资料

简易留言簿

现在,我们就可以使用Linq to sql完成简易留言簿了。实现以下功能:

发表留言(增)

查看留言(查)

收集的最全的LINQ入门资料

管理员回复留言(改)

管理员删除留言(删除)

首先,创建一个Default.aspx,在页面上加入一些控件:

收集的最全的LINQ入门资料

你可能很难想象,使用Linq to sql进行数据访问会是这么简单,后台代码:

收集的最全的LINQ入门资料

{ if (!IsPostBack) { SetBind(); } } protected void btn_SendMessage_Click(object sender, EventArgs e) { tbGuestBook gb = new tbGuestBook(); gb.ID = Guid.NewGuid(); erName = tb_UserName.Text; gb.Message = tb_Message.Text; gb.IsReplied = false; gb.PostTime = DateTime.Now; ctx.tbGuestBooks.Add(gb); ctx.SubmitChanges(); SetBind(); } private void SetBind() { rpt_Message.DataSource = from gb in ctx.tbGuestBooks orderby gb.PostTime descending select gb; rpt_Message.DataBind();

收集的最全的LINQ入门资料

前面创建Linq to sql Classes的时候我们输入名字GuestBook,系统就为我们自动创建了GuestBookDataContext(你也可以在

GuestBook.Designer.cs

中找到类定义)。在绑定的时候我们使用查询句法查询留言表中所有留言,按照发表时间倒序(天哪?这是数据访问吗?好像仅仅定义了一句SQL啊)。在发表留言按钮中,我们为一个tbGuestBook赋值,然后把它加入留言表,再提交更改,就这样完成了记录的插入。 运行效果如下图:

收集的最全的LINQ入门资料

然后,再创建一个Admin.aspx,前台代码如下:

收集的最全的LINQ入门资料

后台代码:

收集的最全的LINQ入门资料

rpt_Message.DataSource = from gb in ctx.tbGuestBooks orderby gb.PostTime descending select gb; rpt_Message.DataBind(); } protected void rpt_Message_ItemCommand(object source, RepeaterCommandEventArgs e) { if (mandName == "DeleteMessage") { StreamWriter sw = new StreamWriter(Server.MapPath("log.txt"), true); ctx.Log = sw; tbGuestBook gb = ctx.tbGuestBooks.Single(b => b.ID == new Guid(mandArgument.ToString())); ctx.tbGuestBooks.Remove(gb); ctx.SubmitChanges(); SetBind(); sw.Close(); } if (mandName == "SendReply") { StreamWriter sw = new StreamWriter(Server.MapPath("log.txt"), true); ctx.Log = sw; tbGuestBook gb = ctx.tbGuestBooks.Single(b => b.ID == new Guid(mandArgument.ToS

tring())); gb.Reply = ((TextBox)e.Item.FindControl("tb_Reply")).Text;

本文来源:https://www.bwwdw.com/article/ydh4.html

Top