Linq之Linq to Sql

目录

写在前面

系列文章

Linq to sql

总结

写在前面

上篇文章介绍了linq to xml的相关内容,linq to xml提供一种更便捷的创建xml树,及查询的途径。这篇文章将继续介绍linq to sql的内容。个人觉得linq to sql在实际开发中在中小型项目中用的比较多,在中小型项目用ef或者nhibernate这些orm确实有点重量级。Linq to Sql提供了丰富的功能,完全可以满足日常数据访问的需求。使用方法也非常简单、灵活。

系列文章

Linq之Lambda表达式初步认识

Linq之Lambda进阶

Linq之隐式类型、自动属性、初始化器、匿名类

Linq之扩展方法

Linq之Expression初见

Linq之Expression进阶

Linq之Expression高级篇(常用表达式类型)

Linq之常见关键字

Linq之延迟加载特性

Linq之Linq to Objects

Linq之Linq to XML

Linq to sql

LINQ to SQL 是 .NET Framework 3.5 版的一个组件,提供用于将关系数据作为对象管理的运行时基础结构。

在 LINQ to SQL 中,关系数据库的数据模型映射到用开发人员所用的编程语言表示的对象模型。 当应用程序运行时,LINQ to SQL 会将对象模型中的语言集成查询转换为 SQL,然后将它们发送到数据库进行执行。当数据库返回结果时,LINQ to SQL 会将它们转换回您可以用您自己的编程语言处理的对象。

具体怎么使用,还是看一个例子吧。

准备一个测试数据库

添加linq to sql类

创建好后,在会在窗口中默认打开Linq2Sql.dbml,然后选择服务器资源管理器,添加映射关系

添加连接

将表拖入Linq2Sql.dbml窗口

到此,数据库映射关系已经完成,然后你在解决方案资源管理器中会看到如下的文件

settings.settings中是数据库连接字符串的可视化管理,你可以在这里面进行连接字符串的修改,添加操作。

App.config中是生成的连接字符串

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <configuration>
 3     <configSections>
 4     </configSections>
 5     <connectionStrings>
 6         <add name="Wolfy.Linq2Sql.Properties.Settings.TestConnectionString"
 7             connectionString="Data Source=.;Initial Catalog=Test;User ID=sa;Password=sa"
 8             providerName="System.Data.SqlClient" />
 9     </connectionStrings>
10     <startup>
11         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
12     </startup>
13 </configuration>

查看Linq2Sql.designer.cs,其中DataContext类为linq to sql的主入口点,也就是咱们经常说的数据库上下文。

好了,到此与数据库的映射关系已经完成,下面看看linq to sql的相关操作。

 1        static void Main(string[] args)
 2         {
 3             //创建数据库上下文对象
 4             Linq2SqlDataContext context = new Linq2SqlDataContext();
 5             TB_Customer customer = new TB_Customer() { ID = 1, Name = "wolfy", Address = "北京海淀" };
 6             //插入
 7             context.TB_Customer.InsertOnSubmit(customer);
 8             List<TB_Customer> customers = new List<TB_Customer>() {
 9             new TB_Customer(){ ID=2, Name="zhangsan", Address="上海"},
10             new TB_Customer(){ID=3, Name="lisi",Address="河南"}
11             };
12             //批量插入
13             context.TB_Customer.InsertAllOnSubmit<TB_Customer>(customers);
14             //提交数据库
15             context.SubmitChanges();
16
17         }

生成的sql语句

exec sp_executesql N'INSERT INTO [dbo].[TB_Customer]([Name], [Address])
VALUES (@p0, @p1)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]',N'@p0 nvarchar(4000),@p1 nvarchar(4000)',@p0=N'wolfy',@p1=N'北京海淀'
exec sp_executesql N'INSERT INTO [dbo].[TB_Customer]([Name], [Address])
VALUES (@p0, @p1)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]',N'@p0 nvarchar(4000),@p1 nvarchar(4000)',@p0=N'zhangsan',@p1=N'上海'
exec sp_executesql N'INSERT INTO [dbo].[TB_Customer]([Name], [Address])
VALUES (@p0, @p1)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]',N'@p0 nvarchar(4000),@p1 nvarchar(4000)',@p0=N'lisi',@p1=N'河南'

批量删除id>=2的客户信息

1             Linq2SqlDataContext context = new Linq2SqlDataContext();
2             var query = from c in context.TB_Customer
3                         where c.ID >= 2
4                         select c;
5             //批量删除
6             context.TB_Customer.DeleteAllOnSubmit(query);
7             //提交数据库
8             context.SubmitChanges();

生成的sql语句

exec sp_executesql N'DELETE FROM [dbo].[TB_Customer] WHERE ([ID] = @p0) AND ([Name] = @p1) AND ([Address] = @p2)',N'@p0 int,@p1 nvarchar(4000),@p2 nvarchar(4000)',@p0=2,@p1=N'zhangsan',@p2=N'上海'
exec sp_executesql N'DELETE FROM [dbo].[TB_Customer] WHERE ([ID] = @p0) AND ([Name] = @p1) AND ([Address] = @p2)',N'@p0 int,@p1 nvarchar(4000),@p2 nvarchar(4000)',@p0=3,@p1=N'lisi',@p2=N'河南'

修改id为1的客户的姓名

1             Linq2SqlDataContext context = new Linq2SqlDataContext();
2             TB_Customer customer = context.TB_Customer.SingleOrDefault(c => c.ID == 1);
3             customer.Name = "zhangsan";
4             //提交数据库
5             context.SubmitChanges();

sql语句

exec sp_executesql N'UPDATE [dbo].[TB_Customer]
SET [Name] = @p3
WHERE ([ID] = @p0) AND ([Name] = @p1) AND ([Address] = @p2)',N'@p0 int,@p1 nvarchar(4000),@p2 nvarchar(4000),@p3 nvarchar(4000)',@p0=1,@p1=N'wolfy',@p2=N'北京海淀',@p3=N'zhangsan'

查出id为1的客户下的所有的订单信息。

1             Linq2SqlDataContext context = new Linq2SqlDataContext();
2             //customer和order表关联查询
3             var query = from o in context.TB_Order
4                         join c in context.TB_Customer
5                         on o.ID equals c.ID
6                         select new { CustomerID = c.ID, OrderID = o.ID, OrderDate = o.OrderDate };
7             //提交数据库
8             context.SubmitChanges();

 sql语句

SELECT [t1].[ID] AS [CustomerID], [t0].[ID] AS [OrderID], [t0].[OrderDate]
FROM [dbo].[TB_Order] AS [t0]
INNER JOIN [dbo].[TB_Customer] AS [t1] ON [t0].[ID] = [t1].[ID]
SELECT [t1].[ID] AS [CustomerID], [t0].[ID] AS [OrderID], [t0].[OrderDate]
FROM [dbo].[TB_Order] AS [t0]
INNER JOIN [dbo].[TB_Customer] AS [t1] ON [t0].[ID] = [t1].[ID]

总结

本篇介绍了linq to sql的相关内容,举了一个使用linq to sql操作数据库的例子,希望能帮你对linq to sql快速上手提供帮助。

参考文章

http://kb.cnblogs.com/page/70851/

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/4278503.html
时间: 2024-09-25 18:23:26

Linq之Linq to Sql的相关文章

Linq之Linq to XML

目录 写在前面 系列文章  linq to xml  总结 写在前面 在很多情况下,都可以见到使用xml的影子.例如,在 Web 上,在配置文件.Microsoft Office Word 文件(将word文档另存为xml文件,这也提供了一种通过操作xml,操作word的一种方式)以及数据库中,都可以看到 XML.而linq to xml提供了一种操作xml更便捷的方式. 系列文章 Linq之Lambda表达式初步认识 Linq之Lambda进阶 Linq之隐式类型.自动属性.初始化器.匿名类

linq to sql-LINQ to SQL,使用listView控件以图象,文字标题形式显示数据

问题描述 LINQ to SQL,使用listView控件以图象,文字标题形式显示数据 LINQ to SQL,使用listView控件以图象,文字标题形式显示数据 user u = new user(); private void RedoForm_Load(object sender, EventArgs e) { LJQLDataContext dc = new LJQLDataContext(); this.listView1.Clear(); foreach (var result i

linq to sql-Linq To Sql编辑DataGridView

问题描述 Linq To Sql编辑DataGridView 我在进行对DataGridView 编辑完毕后光标没有离开编辑点击保存,后重新绑定数据,编辑的那一行数据没有保存到数据库.但是当我再次 点击保存时这一条数据又保存到了数据库这是为什么?

linq能否完美实现sql的row_number和like

问题描述 row_number能够组内排序取每组前十条,这个linq怎么实现?linq怎么实现like'%a%b%',Contains实现不了. 解决方案 解决方案二:'%a%b%'==>varquery=fromtindb.tbAwhere(t.字段名.Contains(a)||t.字段名.Contains(b))selectt;组内排序取每组前十条==>groupby结合Take()来实现即可解决方案三:tim说的对!顶个!处处都能看见tim的身影,感恩节了,给你致敬!解决方案四:字段名.

linq 查询 Linq 高级查询实例代码_实用技巧

复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Text.RegularExpressions; using System.IO; using System.Text; using System.Data; namespa

LINQ 图解 LINQ学习第三篇

LINQ,语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据. 从技术角度而言,LINQ定义了大约40个查询操作符,如select.from.in.where以及order by(C#中).使用这些操作符可以编写查询语句.不过,这些查询还可以基于很多类型的数据,每个数据类型都需要一个单独的LINQ类型. 看图,不解释                

从sql走向linq的问题

A left (outer) join B on A.bid=B.id 上面这句话叫做左连接,原因是left(左)join(加入,连入)被译为左连接,所以,这是关于语法中关键字的翻译,而非连接原理,造成不能以为是从第一张表的左边连接.相反,它是从A表的右边开始连接的.原因很简单,比如一个普通的查询语句:select t.id TID from table1 t.后面的那个t是对table1的标记,再看TID它也是对t.id的标记,它们的功能是什么我们暂且不说,起码我们知道了sql的语法习惯是将附

LINQ TO SQL纵览

1.LINQ和LINQ TO SQL 这是初学者经常模糊的一个概念.其实两这个是不同.先来看LINQ. 一下引自MSND:http://msdn.microsoft.com/zh-cn/library/bb397926.aspx 语言集成查询 (LINQ) 是 Visual Studio 2008 中的一组功能,可为 C# 和 Visual Basic 语言语法提供强大的查询功能.LINQ 引入了标准的.易于学习的查询和更新数据模式,可以对其技术进行扩展以支持几乎任何类型的数据存储. 通常我们应

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

上一篇讲述了LINQ,顺便说了一下Where操作,这篇开始我们继续说LINQ to SQL语句,目的让大家从语句的角度了解LINQ,LINQ包括LINQ to Objects.LINQ to DataSets.LINQ to SQL.LINQ to Entities.LINQ to XML,但是相对来说LINQ to SQL在我们程序中使用最多,毕竟所 有的数据都要在数据库运行着各种操作.所以先来学习LINQ to SQL,其它的都差不多了,那么就从Select说起吧,这个在编写程序中也最为常