LINQ体验(9)——LINQ_to_SQL语句之Insert、Update、Delete操作
- 格式:pdf
- 大小:93.95 KB
- 文档页数:7
使用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()方法来应用变化返回到数据库。
sql linq写法SQL和LINQ都是用于查询和操作数据的语言,但它们的写法有一些区别。
下面是一些SQL查询的LINQ写法示例:1.SQL中的SELECT语句可以选择特定的列,而在LINQ中,可以使用对象属性的方式来选择列。
例如,假设有一个名为“Customers”的表,其中包含“CustomerID”、“CustomerName”和“ContactName”等列,要选择其中的“CustomerName”和“ContactName”列,SQL语句为:2.sql复制代码SELECT CustomerName, ContactName FROM Customers;而在LINQ中,可以这样写:c复制代码var query = from c in db.Customersselect new { c.CustomerName, c.ContactName };1.SQL中的WHERE子句用于过滤数据,而在LINQ中,可以使用Lambda表达式或匿名函数来过滤数据。
例如,要选择“Customers”表中“Country”为“Germany”的所有客户,SQL语句为:2.sql复制代码SELECT * FROM Customers WHERE Country = 'Germany';而在LINQ中,可以这样写:c复制代码var query = db.Customers.Where(c => c.Country == "Germany");1.SQL中的JOIN操作可以用于连接两个或多个表,而在LINQ中,可以使用Join方法或导航属性来连接表。
例如,要选择所有订单及其相关的客户信息,SQL语句为:2.vbnet复制代码SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDateFROM OrdersINNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;而在LINQ中,可以这样写:c复制代码var query = from o in db.Ordersjoin c in db.Customers on o.CustomerID equals c.CustomerIDselect new { o.OrderID, c.CustomerName, o.OrderDate };1.SQL中的GROUP BY子句可以按照指定的列对结果进行分组,而在LINQ中,可以使用GroupBy方法对结果进行分组。
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 插入值,以及如何取回自增的IDlinq to s ql 在插入值的时候还是很方便。
有时候我们需要在插入一个新的实体之后得到那个实体的主键I D的值,这个I D当然必须是自增。
一段时间我一直认为直接使用linq to s ql的插入机制是不可以在做到的,所以只有使用存储过程的,具体可以查看这篇文章:h ttp:///2008/01/c us tom-ins ert-logic-with-linq-to-s ql.html,但是总是觉得这样太麻烦了。
通过观察linq t o s ql插入之后产生的s ql发现,它自动生成了两条语句,一条ins ert,一条s elec t,而且那条s elec t正好就是查询的最后生成的主键ID,真是不可思议呀。
下面以一个实际的代码演示一下:1.新建一个新闻表:列名数据类型允许为NU LL 默认值主键----------------------------------------------------------------------------ID int 自增是Title nvarc har(200)P ubDate datetime getdate()Tag nvarc har(200) 是2.通常的做法就是新建一个Linq to s ql 的类文件,然后通过可视化设计器把数据表拖到设计器中,但是这样一"托"永逸的做法是根本不行的,还要需要修改一些地方,数据库中默认值的字段除了主键在自动生成的linq to s ql的类文件中所对应的属性上面的列特性是没有标记Is DbGenerated=tr ue的,这一点是必须要修改的。
在本例中要修改的就是在P ubdate属性把I sDbGenerated=true添加上,当然也可以在可视化的方式修改:3.下面就来测试linq to s ql 中插入值所产生的s ql语句:us ing (DemoDataContext db = new DemoDataContext()) {db.Log = new WebA pp.DataServer.DebuggerWriter(); N ews news = new N ew s { Title = "测试" };db.N ews.I nsertOnSubmit(news);db.SubmitChanges();}对应产生的s ql语句:看的很清楚一条ins ert ,一条s elect ,注意s elec t中的字段正式设置了默认生成的字段。
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基础+Lambda表达式对数据库的增删改及简单查询⼀、Linq to sql 类⾼集成化的数据库访问技术使⽤Linq可以代替之前的,省去了⾃⼰敲代码的实体类和数据访问类的⼤量⼯作实体类:添加⼀个Linq to sql 类 ----选择要使⽤的数据库---- 拖⼊要使⽤的表需要⽴即保存就相当于创建实体类如果进⾏属性扩展,在App_Code下添加类,类名同表名⼀致。
将该类在访问修饰符后加上partial,将该类定为实体类的⼀部分数据访问类:不⽤在App_Code下再建数据访问类了。
直接在使⽤数据访问类的地⽅⽤数据库上下⽂进⾏编写。
ers.ToList(); //是将Users表转化为⼀个泛型集合。
也就相当于查询全部的⽅法⼆、利⽤Linq对数据库进⾏相关操作1、添加数据每⼀条数据都是⼀个实体类对象。
先将其实例化出来,再给对象的每个属性赋值。
在数据访问类中进⾏添加数据操作添加的⽅法:ers.InsertOnSumbit(对象);⽅法执⾏结束后提交对数据库的更改:con.SubmitChanges();2、删除数据删除数据前要先查到这条数据再进⾏删除操作通过ids进⾏查询这条数据返回⼀个对象Users u = ers.Where(r=>r.ids.Tostring()==ids).FirstOrDefault();where括号内接的是Lambda表达式,r代表⼀个Users对象,=>是基本格式,FirstOrDefault()返回第⼀条数据或者返还空如果u不是空,则在数据访问类中进⾏删除。
ers.DeleteOnSubmit(对象);con.SubmitChanges();3、数据修改数据的修改同样也是需要先查到这条数据,将返回的这个对象的要修改的属性进⾏重新赋值最后con.SubmitChanges();4、简单数据查询直接在数据访问类中根据对象的属性进⾏查询,多个查询条件中间⽤ && 连接;如 ers.Where(r=>erName=="zhangsan" && r.PassWord=="123").FirstOrDefault();。
LinqToSQL和LinqToObject的批量操作InsertAllOnSubmit介绍⽆论是Linq To SQL还是Linq To Object(Entity frameworks)它们都为开发⼈员提供了Insert操作,及Insert集合操作,即InsertOnSubmit和InsertAllOnSubmit,前者是将⼀个实体标记为⼀个插⼊状态,⽽后都是将⼀个集合标记为插⼊状态,...⽆论是Linq To SQL还是Linq To Object(Entity frameworks)它们都为开发⼈员提供了Insert操作,及Insert集合操作,即InsertOnSubmit和InsertAllOnSubmit,前者是将⼀个实体标记为⼀个插⼊状态,⽽后都是将⼀个集合标记为插⼊状态,⽽当前进⾏这两种操作时,你并没有与数据库进⾏连接,这就是LINQ提倡的延时加载,那它们什么时候与数据库进⾏真正的交互呢,实现上,实验表明,是在触发SubmitChanges⽅法时,才会真实与数据库进⾏操作,这是正常的,也没有什么可以说的。
⽽今天我主要说的就是,当我们进⾏批量插⼊时,⽤linq给我们提供的InsertAllOnSubmit⽅法是否可以实现我们的操作,如果实现了,那是否是我们能够接受的⽅式,我们在做⼀个实验吧⼀个列表:1 2 3 4 5 6 7 8 9List userList=new List();for(int i=0;i<100000;i++){userList.Add(new User{Name="zzl"+i}); }_db.InsertAllOnSubmit(userList);_db.SubmitChanges();结果怎么样呢?经过我的观察,结果是正确的,10万条数据可以插⼊到数据库中,LINQ确实是帮助我们完成了列表的插⼊⼯作,但过程我们是否可以接受?可以肯定的说,不可以,⽽且是⾮常不可以,对于这个插⼊操作,它对数据服务器的压⼒是惊⼈的,它建⽴“链接”次为10万次,即每个Insert 语句就建⽴⼀个链接,这是我们不能接受的,所以,LINQ的批量操作确实靠不住。
updatesql用法更新SQL语句是在数据库中修改已存在数据的过程。
当需要对数据库进行更改、插入或删除行时,可以使用更新SQL语句来实现。
以下是更新SQL语句的用法和步骤详解。
一、基本语法和关键字更新SQL语句的基本语法如下:UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;其中,`table_name`表示要更新的表名,`column1`, `column2`, ...表示要更新的列,`value1`, `value2`, ...表示要设置的新值,`condition`表示筛选要更新行的条件。
在更新SQL语句中,还有一些关键字需要了解:1. UPDATE:关键字用于指示要执行更新操作。
2. SET:关键字用于指定要更新的列和它们的新值。
3. WHERE:关键字用于筛选要更新的行。
二、更新SQL语句的步骤要执行更新SQL语句,可以按照以下步骤进行:步骤1:确定要更新的表首先,需要确定要进行更新操作的数据库表。
可以使用`UPDATE`语句后面的关键词`table_name`来指定要更新的表。
步骤2:确定要更新的列和新值其次,需要确定要更新的列以及要为这些列设置的新值。
可以使用`SET`关键字后面的列名和新值来指定。
步骤3:指定更新的行然后,需要指定要更新的行。
可以使用`WHERE`关键字后面的条件来筛选要更新的行。
可以使用多种条件运算符(如等于、大于、小于等)来指定具体的条件。
步骤4:执行更新操作最后,执行更新操作。
当更新SQL语句执行完成后,数据库中的相应行将会被更新为指定的新值。
三、实际应用示例为了更好地理解更新SQL语句的用法,下面举一个实际的示例。
假设有一个名为"students"的表,包含三列:id、name、score。
现在需要将id 为1的学生的分数更新为90分。
简单的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;。