Linq之Linq to Sql
目录
写在前面
上篇文章介绍了linq to xml的相关内容,linq to xml提供一种更便捷的创建xml树,及查询的途径。这篇文章将继续介绍linq to sql的内容。个人觉得linq to sql在实际开发中在中小型项目中用的比较多,在中小型项目用ef或者nhibernate这些orm确实有点重量级。Linq to Sql提供了丰富的功能,完全可以满足日常数据访问的需求。使用方法也非常简单、灵活。
系列文章
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中是生成的连接字符串
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="Wolfy.Linq2Sql.Properties.Settings.TestConnectionString"
connectionString="Data Source=.;Initial Catalog=Test;User ID=sa;Password=sa"
providerName="System.Data.SqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
查看Linq2Sql.designer.cs,其中DataContext类为linq to sql的主入口点,也就是咱们经常说的数据库上下文。

好了,到此与数据库的映射关系已经完成,下面看看linq to sql的相关操作。
增
static void Main(string[] args)
{
//创建数据库上下文对象
Linq2SqlDataContext context = new Linq2SqlDataContext();
TB_Customer customer = new TB_Customer() { ID = , Name = "wolfy", Address = "北京海淀" };
//插入
context.TB_Customer.InsertOnSubmit(customer);
List<TB_Customer> customers = new List<TB_Customer>() {
new TB_Customer(){ ID=, Name="zhangsan", Address="上海"},
new TB_Customer(){ID=, Name="lisi",Address="河南"}
};
//批量插入
context.TB_Customer.InsertAllOnSubmit<TB_Customer>(customers);
//提交数据库
context.SubmitChanges(); }
生成的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的客户信息
Linq2SqlDataContext context = new Linq2SqlDataContext();
var query = from c in context.TB_Customer
where c.ID >= 2
select c;
//批量删除
context.TB_Customer.DeleteAllOnSubmit(query);
//提交数据库
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的客户的姓名
Linq2SqlDataContext context = new Linq2SqlDataContext();
TB_Customer customer = context.TB_Customer.SingleOrDefault(c => c.ID == 1);
customer.Name = "zhangsan";
//提交数据库
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的客户下的所有的订单信息。
Linq2SqlDataContext context = new Linq2SqlDataContext();
//customer和order表关联查询
var query = from o in context.TB_Order
join c in context.TB_Customer
on o.ID equals c.ID
select new { CustomerID = c.ID, OrderID = o.ID, OrderDate = o.OrderDate };
//提交数据库
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/
Linq之Linq to Sql的更多相关文章
- Unity3D C#中使用LINQ查询(与 SQL的区别)
学过SQL的一看就懂 LINQ代码很直观 但是,LINQ却又跟SQL完全不同 首先来看一下调用LINQ的代码 int[] badgers = {36,5,91,3,41,69,8}; var skun ...
- 使用LINQ生成Where的SQL语句
实例1-使用实例-单个语句: ; List<, , }; List<User_info> userInfoList = UserCenterBus.Select_WebSiteBas ...
- SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总
SQL Server游标 转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
IT咨询顾问:一次吐血的项目救火 年后的一个合作公司上线了一个子业务系统,对接公司内部的单点系统.我收到该公司的技术咨询:项目启动后没有规律的突然无法登录了,重新启动后,登录一断时间后又无法重新登 ...
- [LINQ2Dapper]最完整Dapper To Linq框架(五)---查看Linq实际执行的SQL
此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper支持.net framework4.6.1及 ...
- Linq技术四:动态Linq技术 -- Linq.Expressions
前面介绍了Linq的三个方面应用:Linq to SQL, Linq to XML和Linq to Object,这篇介绍一下动态Linq的实现方式及应用场景. 命名空间: System.Linq; ...
- C# ~ 从 XML 到 Linq 到 Linq to XML
.XML 可扩展标记语言 (Extensible Markup Language), 标记 (markup) 是关键部分,是标准通用标记语言 (Standard Generalized Markup ...
- Linq之Linq to XML
目录 写在前面 系列文章 linq to xml 总结 写在前面 在很多情况下,都可以见到使用xml的影子.例如,在 Web 上,在配置文件.Microsoft Office Word 文件(将wor ...
- C#5.0之后推荐使用TPL(Task Parallel Libray 任务并行库) 和PLINQ(Parallel LINQ, 并行Linq). 其次是TAP(Task-based Asynchronous Pattern, 基于任务的异步模式)
学习书籍: <C#本质论> 1--C#5.0之后推荐使用TPL(Task Parallel Libray 任务并行库) 和PLINQ(Parallel LINQ, 并行Linq). 其次是 ...
随机推荐
- mysql sql获取上条插入id,update影响行数
1.获取上条插入数据 LAST_INSERT_ID(); 2.获取update影响行数. ROW_COUNT(); mysql> UPDATE t -> SET address = 'be ...
- Qt与VC编程合作起龌龊
由于历史原因,某软件项目的界面采用QT,而后台用了VC,界面静态调用了VC生成的dll,一直以来都能够快乐的合作,然而最近出现两个小问题,觉得两者之间的合作并没有想象的那么美好. 在VC下用多媒体定时 ...
- selenium如何操作cookies实现免登录
执行接口测试或者某些自动化测试时,为了避免每次访问接口都需要登录操作,可以用访问接口时,把cookies信息传过去. 思路是先登录一次页面,获取到cookies信息,把cookies信息保存到本地文件 ...
- POJ 3416 Crossing --离线+树状数组
题意: 给一些平面上的点,然后给一些查询(x,y),即以(x,y)为原点建立坐标系,一个人拿走第I,III象限的点,另一个人拿II,IV象限的,点不会在任何一个查询的坐标轴上,问每次两人的点数差为多少 ...
- DataGridView 行、列的隐藏和删除
) 行.列的隐藏 [VB.NET] ' DataGridView1的第一列隐藏 DataGridView1.Columns(0).Visible = False ' DataGridView1的第一行 ...
- Android自定义进度条颜色
这个没法了只能看源码了,还好下载了源码, sources\base\core\res\res\ 下应有尽有,修改进度条颜色只能找progress ,因为是改变样式,首先找styles.xml ? 1 ...
- 对访问修饰关键字public, protected, internal and private的说明
对访问修饰关键字public, protected, internal and private的说明1.msdn: Internal types or members are accessible o ...
- 创建服务factory和service方法的区别
factory方法返回的是对象,json或数组,也可以返回字符串类型的数据,但service方法只能返回数据或对象 创建服务有3种方法 $provide.provider('服务名',function ...
- Xcode中文乱码问题
老师给拷贝的程序用Xcode打开中文显示是乱码,而预览里面是正常显示的,Xcode默认编码UTF-8没错的,怎么办呢? 解决办法:用自带的文本编辑器打开,全选,复制,Xcode中打开文件,粘贴,ok~ ...
- MySQL 约束的讲解
MySQL 约束 作用:保证数据的完整性和一致性按照约束的作用范围分为:表级约束和行级约束.常见的约束类型包括: Not null(非空约束) Primary key (主键约束) Unique ke ...