LINQ体验(9)——LINQ to SQL语句之InsertUpdateDelete操作
Linq to sql 更新数据库

使用LINQ to SQL建模Northwind数据库在这之前一起学过LINQ to SQL设计器的使用,下面就使用如下的数据模型:当使用LINQ to SQL设计器设计以上定义的五个类(Product,Category,Customer,Order和OrderDetail)的时候,每个类中的属性都映射了相应数据库中表的列,每个类的实例则代表了数据库表中的一条记录。
另外,当定义数据模型时,LINQ to SQL设计器同样会创建一个自定义DataContext类,来作为数据库查询和应用更新/变化的主要渠道。
以上数据模型中定义的DataContext类命名为“NorthwindDataContext”。
该类中包含了代表每个建模数据库表的属性。
使用LINQ语法表达式可以十分简单的使用NorthwindDataContext类来查询和检索数据库中的数据。
LINQ to SQL会在运行时自动的转换LINQ表达式到适当的SQL代码来执行。
例如,编写以下LINQ表达式来根据Product Name检索单个Product对象:还可以使用LINQ表达式来检索所有不存在于Order Details中的,并且UnitPrice大于100的所以Product:变化跟踪和DataContext.SubmitChanges()当执行查询和检索像Product实例这样的对象时,LINQ to SQL会自动保持对这些对象任何变化或更新的跟踪。
我们可以进行任意次数的查询,以及使用LINQ to SQL的DataContext类作出更新,而这些变化都会被全部跟踪。
注意:LINQ to SQL的变化跟踪发生于调用者端——而不是在数据库中。
这就意味着使用跟踪不会销耗任何数据库资源,也不需要在数据库中改变/安装任何组件模块。
当对从LINQ to SQL中检索的对象作出更改之后,我们可以选择调用DataContext上的SubmitChange()方法来应用变化返回到数据库。
图文结合教你用好LINQ to SQL

不过谈到.NET平台,ORM框架似乎相对混乱了点。
很多朋友问我的时候,往往会这样问:NHibernate、NBear和Castle该选择哪个?而当我反问:为什么不适用微软自带的Linq to SQL 呢?对方经常会迷茫和不解。
我觉得这是个很奇怪的现象。
依照我个人的实践,我认为当需要快速构建一个中小型项目时,Linq to SQL是一个很好的选择。
你至少有以下理由可以选择它:i. 它是微软自己的产品,和.NET平台有着天生的适应性。
如果你使用.NET Framework3.5和 VS2008开发环境,它本身就集成在里面了,同时VS2008对于Linq to SQL 给予了诸多方便的支持。
使用它,你不仅在开发和部署时不用考虑第三方库,更可以尽情享受VS2008带来的种种方便。
ii. 上手十分容易,使用十分轻松,通常,你不需要编写一行代码,也不用写任何XML 配置,完全通过可视化拖拽就能完成ORM层的构建。
iii. 功能丰富,使用便捷。
当轻松构建好ORM层后,你就可以更轻松的操纵数据库了。
Linq to SQL提供了丰富的功能,完全可以满足日常数据访问的需求。
使用方法也非常简单、灵活。
有这么好的理由,我真想不通为什么那么多人不愿去选择它。
我想来想去,也许有两个重要原因,一是把LINQ和Linq to SQL混为一谈了,二是受前段时间“LINQ已死”的误导,觉得微软已经抛弃Linq to SQL了。
关于这两点,我就不细说了,简略澄清一下:首先,LINQ是从.NET Framework3.0开始,.NET平台上引入的一种新式语言特性,狭义一点,你可以讲它理解成一种新式语法,主要是针对迭代数据操作的,所以,也许LINQ 叫做“数据迭代引擎(Data Iterative Engine)”更合适,之所以不着样命名,我想微软可能不愿意让自己产品的简写为“DIE”吧。
:-)而Linq to SQL是LINQ在数据库访问方面的一个应用框架,完全是两码事。
一步一步学Linq to sql

意义不是很大,纯粹解决机械劳动。编译器自动为你生成get、set操作以及字段,并且你不能使用字段也不能自定义get、set操作,不过你可以分别定义get和set的访问级别。
对象初始化器
publicclassPerson
{
publicstringusername {get;set; }
Table<Customer> Customers = ctx.GetTable<Customer>();
GridView1.DataSource =fromcinCustomerswherec.CustomerID.StartsWith("A")selectnew{顾客ID=c.CustomerID,顾客名=,城市=c.City};
Console.WriteLine("username:{0} age:{1}", ername, data.age);
匿名类型允许开发人员定义行内类型,无须显式定义类型。常和var配合使用,var用于声明匿名类型。定义一个临时的匿名类型在LINQ查询句法中非常常见,我们可以很方便的实现对象的转换和投影。
今天就说到这里,再见!
DataContext与实体
DataContext
DataContext类型(数据上下文)是System.Data.Linq命名空间下的重要类型,用于把查询句法翻译成SQL语句,以及把数据从数据库返回给调用方和把实体的修改写入数据库。
DataContext提供了以下一些使用的功能:
?以日志形式记录datacontext生成的sql?执行sql包括查询和更新语句?创建和删除数据库datacontext是实体和数据库之间的桥梁那么首先我们需要定义映射到数据表的实体
linq转化为sql语句的方法

linq转化为sql语句的方法Linq转化为SQL语句的方法概述Linq(Language Integrated Query)是微软推出的一种用于查询和操作数据的统一编程模型。
它可以在不同的数据源上执行查询,例如关系型数据库、XML文档等。
在开发过程中,我们常常需要将Linq 表达式转化为相应的SQL语句,以便对数据库进行操作。
本文将详细介绍多种将Linq转化为SQL语句的方法。
1. LINQ to SQL基本概念LINQ to SQL是一种将LINQ查询转化为SQL语句的方法。
它是Entity Framework的一部分,提供了一种直接在.NET应用程序中使用对象来表示和操作关系型数据库的方式。
在LINQ to SQL中,可以通过DataContext对象来执行查询,并将查询结果转化为SQL语句。
示例代码using System;using ;using ;public class Program{public static void Main(){// 创建DataContext对象,连接数据库DataContext context = new DataContext("Data Sour ce=.;Initial Catalog=MyDatabase;Integrated Security=True ");// 创建查询表达式var query = from c in <Customer>()where == "Beijing"select c;// 执行查询并获取SQL语句string sql = (query).CommandText;// 输出SQL语句(sql);}}2. Entity Framework基本概念Entity Framework是微软推出的一种对象关系映射(ORM)工具,可以映射.NET对象与数据库中的表、视图等关系。
LINQ to SQL

LINQ查询的目的是从指定的数据源中查询满足符合特定条件的数据元素,并且通过根据需要对这些查询的元素进行排序、连接等操作。
所以LINQ查询包含如下几个主要元素:•数据源:数据源表示LINQ查询将从哪里查找数据,它通常是一个或多个数据集,每个数据集包含一系列的元素。
数据集是一个类型为IEnumerable<T>或IQueryable<T>的对象,可以对它进行枚举,遍历每一个元素。
此外,它的元素可以是任何数据类型,所以可以表示任何数据的集合。
•目标数据:数据源中的元素并不定是查询所需要的结果。
目标数据用来指定查询的具体想要的是什么数据。
在LINQ中,它定义了查询结果数据集中元素的具体类型。
•筛选条件:筛选条件定义了对数据源中元素的过滤条件。
只有满足条件的元素才作为查询结果返回。
筛选条件可以是简单的逻辑表达式表示,也可以用具有复杂逻辑的函数来表示。
•附加操作:附加操作表示一些其它的具体操作。
比如,对查询结果进行分组等。
其中,数据源和目标数据库是LINQ查询的必备元素,筛选条件和附加操作是可选元素。
2.用from子句指定数据源每个LINQ查询都以from子句开始,from子句包括以下两个功能。
•指定查询将采用数据源。
•定义一个本地变量,表示数据源中单个元素。
单个from子句的编写格式如下所示。
其中dataSource表示数据源,localVar 表示单个元素。
from localVar in dataSource3.用select子句指定目标数据select子句指定在执行查询时产生结果的数据集中元素的类型,它的格式如下所示:select element4.用where子句指定筛选条件在LINQ中,用where子句指定查询的过滤条件,它的格式如下:where expression其中,express是一个逻辑表达式,返回布尔值“真”或“假”在LINQ查询中,还可以使用多个并列的where子句来进行多个条件过滤。
目前本人收集的最全的LINQ入门资料大家一起LINQ吧

目前本人收集的最全的LINQ入门资料大家一起LINQ吧入门教程系列1LinqtoSql(一):DataConte某t与实体LinqtoSql(二):增删改LinqtoSql(三):查询句法LinqtoSql(四):存储过程LinqtoSql(五):探究特性LinqtoSql(六):并发与事务LinqtoSql(七):继承与关系Linqtoql(八):其它入门教程系列2LINQ体验(1)——ViualStudio2022新特性我平时利用课余零碎时间来学习3.5、LINQ、Silverlight、3.5E某tenion等新东西,通过笔记形式来记录自己所学的历程,也给大家一起学习ViualStudio2022和.NET3.5提供一个平台,为保证此系列的完整性,我打算先依次介绍一下C#3.0新语言特性和改进,然后从一条一条LINQ语句分析来贯穿LINQ的知识点……LINQ体验(2)——C#3.0新语言特性和改进(上篇)LINQ体验(3)——C#3.0新语言特性和改进(下篇)LINQ体验(4)——LINQ简介和LINQtoSQL语句之WhereLINQ是LanguageIntegratedQuery的简称,它是集成在.NET编程语言中的一种特性。
已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰富的元数据,智能感知、静态类型等强类型语言的好处。
并且它同时还使得查询可以方便地对内存中的信息进行查询而不仅仅只是外部数据源。
…LINQ体验(5)——LINQtoSQL语句之Select/Ditinct和Count/Sum/Min/Ma某/AvgLINQ体验(6)——LINQtoSQL语句之Join和OrderByLINQ体验(7)——LINQtoSQL语句之GroupBy/Having和E某it/In/Any/All/Contain我们继续讲解LINQtoSQL语句,这篇我们来讨论GroupBy/Having操作符和E某it/In/Any/All/Contain操作符。
LINQ体验(11)——LINQ to SQL语句之Null语义和StringDateTime方法
在本系列中,主要介绍LINQ to SQL基础的东西,因为LINQ太强大了,它对我们平常使用不同的数据源有着不同的内容,其包括对于SQL Server 数据库的LINQ to SQL;对于XML 文档的LINQ to XML;对于 数据集的LINQ to DataSet;对于.NET 集合、文件、字符串等的LINQ to Objects。
例外也出现了一些对LINQ支持的开源项目,例如LINQ to JSON,LINQ for NHibernate等等。
在这个系列中,一些关于LINQ to SQL基础的东西就这么多了,这一篇用一些例子说明一下Null语义和String/DateTime方法。
Null语义说明:下面第一个例子说明查询ReportsToEmployee为null的雇员。
第二个例子使用 Nullable<T>.HasValue查询雇员,其结果与第一个例子相同。
在第三个例子中,使用 Nullable<T>.Value来返回ReportsToEmployee不为null的雇员的ReportsTo的值。
1.Null查找不隶属于另一个雇员的所有雇员:var q =from e in db.Employeeswhere e.ReportsToEmployee == nullselect e;2.Nullable<T>.HasValue查找不隶属于另一个雇员的所有雇员:var q =from e in db.Employeeswhere !e.ReportsTo.HasValueselect e;3.Nullable<T>.Value返回前者的EmployeeID 编号。
请注意.Value 为可选:var q =from e in db.Employeeswhere e.ReportsTo.HasValueselect new{e.FirstName,stName,ReportsTo = e.ReportsTo.Value};字符串/日期函数(String/Date Functions)LINQ to SQL支持以下String方法。
LinQtoSQL用法详解
LinQtoSQL⽤法详解LinQ是指集成化查询语⾔,通过映射将内的表名变为C#的类名,将列名作为属性名,将表的关系作为类的成员对象。
O--M--R O-Object对象R-Relation关系M-Mapping映射LinQ包括:LinQ to SQL,针对SQL的查询,它是⼀个带有可视化的操作界⾯的ORM⼯具。
LinQ to Object,⽤来实现对内存中集合对象的查询。
LinQ to DataSet,对强类型化或弱类型化的DataSet或独⽴的DataTable进⾏查询。
LinQ to Entity,对实体框架中EDM定义的实体集合进⾏查询。
(⼀):LinQ to SQL第⼀步:建⽴LinQ2SQL类添加⼀个新建项,选择LinQ to SQL,将⽤到的表拖进来。
第⼆步:实例化上下⽂对象,基本所有操作都是通过上下⽂对象来进⾏的。
MyDBDataContext context = new MyDBDataContext();第三步:操作⼀、增加数据:1.造⼀个要添加的数据对象:Info data = new Info();data.Code = "p211"; = "⽯头";data.Sex = false;data.Nation = "N001";data.Birthday = new DateTime(1990, 1, 2);2.在上下⽂中注册上⾯新造的对象。
.InsertOnSubmit(data);3.提交执⾏context.SubmitChanges();⼆、删除:1. 找出要删除的数据MyDBDataContext context = new MyDBDataContext();var q = .Where(p => p.Code == "p003");2. 删除注册if (q.Count() > 0){Info data = q.First();//注册context.Work.DeleteAllOnSubmit(data.Work);context.Family.DeleteAllOnSubmit(data.Family);.DeleteOnSubmit(data);}3. 提交执⾏context.SubmitChanges();三、修改:1. 找出要修改的数据MyDBDataContext context = new MyDBDataContext();var q = .Where(p=>p.Code == "p001");2. 改,不⽤注册if (q.Count() > 0){Info data = q.First();//改 = "胡⽣";data.Nation = "n001";data.Sex = false;}3. 提交执⾏context.SubmitChanges();四、查询:1.查所有MyDBDataContext context = new MyDBDataContext();//所有⼈员var q = ;//var q = from p in select p;//显⽰foreach(Info data in q){//data.Nation1:当前⼈员对应的民族对象。
【IT专家】简单的linq to sql 的例子 ,实现了增删改查
简单的linq to sql 的例子,实现了增删改查2011/03/03 575 自己先要建立一个名为bbs的数据库里面要建立一个名为linqtoTest的表。
在添加项目中添加linq to sql 类,再把资源管理器打开,新建连接,找到你建立的那个数据库。
把那个表拖到 那个linq to sql 类中。
就行了。
using System;using System.Data.SqlClient;using System.Data;using System.Linq;using System.Web.UI.WebControls;using System.Data.Linq; public partial class linq_boundfield_ : System.Web.UI.Page{ linqtoTestDataContext db_Test = new linqtoTestDataContext(); protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { // getDatabind1(); getDatabind2(); } } /// summary /// 这是用我们平常/// 的方法来绑定数据/// /summary //void getDatabind1() //{ // SqlConnection con = DB.createsql(); // con.Open(); // string sql = “select * from LinqtoTest”; // SqlCommand cmd = new SqlCommand(sql, con); // SqlDataAdapter sda = new SqlDataAdapter(cmd); // DataSet ds = new DataSet(); // sda.Fill(ds, “linqtoTest”); // this.GridView1.DataSource = ds.Tables[“linqtoTest”].DefaultView; // this.GridView1.DataBind(); //} //这是用linq来绑定数据 void getDatabind2() { //linqtoTestDataContext db_Test = new linqtoTestDataContext(); this.GridView1.DataSource = db_Test.LinqtoTest;。
asp.net使用LINQ to SQL连接数据库及SQL操作语句用法分析
本文实例讲述了使用LINQ to SQL连接数据库及SQL操作语句用法。
分享给大家供大家参考,具体如下:LINQ简介LINQ:语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展。
它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。
LINQ是一门查询语言,和SQL一样,通过一些关键字的组合,实现最终的查询。
LINQ的分类LINQ to ObjectLINQ to XMLLINQ to SQLLINQ to DataSetLINQ to 命名空间为System.Linq;LINQ查询语法:from 临时变量in 集合对象或数据库对象where 条件表达式[orderby条件][group by 条件]select 临时变量中被查询的值例:from c in Student select c;假设Student是一个数据库表对应的一个实体类则查询语句为:from c in Student select c;//整表查询from c in Student where =="张三" select c;//查询姓名为张三的所有信息其中C为临时变量,可任意取。
查询几个字段1、查询student表中的几个字段代码如下:var query=from c in student select new {c.number,,c.age};2、查询student表中的几个字段,并重新设定列名代码如下:var query=from c in student select new {学号=c.number,姓名=, 年领=c.age};注意事项linq查询语句必须以from子句开始,以select 子句结束。
Linq是在.NET Framework 3.5 中出现的技术,所以在创建新项目的时候必须要选3.5或者更高版本,否则无法使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作
我们继续讲解LINQ to SQL语句,这篇我们来讨论Insert/Update/Delete操作。
这个在我们的程序中最为常用了。
我们直接看例子。
Insert/Update/Delete操作
Insert
1.简单形式
说明:new一个对象,使用InsertOnSubmit方法将其加入到对应的集合中,使用Sub mitChanges()提交到数据库。
2.一对多关系
说明:Category与Product是一对多的关系,提交Category(一端)的数据时,LINQ t o SQL会自动将Product(多端)的数据一起提交。
3.多对多关系
说明:在多对多关系中,我们需要依次提交。
4.Override using Dynamic CUD
说明:CUD就是Create、Update、Delete的缩写。
下面的例子就是新建一个ID(主键)为32的Region,不考虑数据库中有没有ID为32的数据,如果有则替换原来的数据,没有则插入。
(不知道这样说对不对。
大家指点一下)
Update
说明:更新操作,先获取对象,进行修改操作之后,直接调用SubmitChanges()方法即可提交。
注意,这里是在同一个DataContext中,对于不同的DataContex看下面的讲解。
1.简单形式
2.多个项
Delete
1.简单形式
说明:调用DeleteOnSubmit方法即可。
2.一对多关系
说明:Order与OrderDetail是一对多关系,首先DeleteOnSubmit其OrderDetail(多端),其次DeleteOnSubmit其Order(一端)。
因为一端是主键。
3.Inferred Delete(推断删除)
说明:Order与OrderDetail是一对多关系,在上面的例子,我们全部删除CustomerID 为WARTH和EmployeeID为3 的数据,那么我们不须全部删除呢?例如Order的Ord erID为10248的OrderDetail有很多,但是我们只要删除ProductID为11的OrderD etail。
这时就用Remove方法。
Update with Attach
说明:在对于在不同的DataContext之间,使用Attach方法来更新数据。
例如在一个名为tempdb的NorthwindDataContext中,查询出Customer和Order,在另一个Nor thwindDataContext中,Customer的地址更新为123 First Ave,Order的Custome rID 更新为CHOPS。
Update and Delete with Attach
说明:在不同的DataContext中,实现插入、更新、删除。
看下面的一个例子:
本系列链接:LINQ体验系列文章导航。