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). 其次是 ...
随机推荐
- VS2010 调试窗口一闪而过解决方法
若此时进行的操作是编译(F5),可先运行程序(Ctrl+F5),若仍然一闪而过,用下面方法解决. 方法一: 1.要有头文件cstdlib,在程序最后写一句(return之前)添加:system(&qu ...
- JS高程读书笔记-第一、二章-内附在线思维导图和quizlet卡片
之前在kindle上买了高程,今天又到了纸质的<JavaScript语言精粹>,<高性能JavaScript>,<JavaScipt设计模式>,开始读书之旅啦. 我 ...
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- -bash: rz: command not found
rz,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具.优点就是不用再开一个sftp工具登录上去上传下载文件. sz:将选定的文件发送(send)到本地机器rz:运行该命 ...
- [ORACLE错误]oracle 不能更新 PL/SQL 点击“edit data”报“ these query results are not updateable”
你可以选择在查询语句的最后加上 for update,就可以打开编辑锁,直接修改数据. 而在默认查询下,点击Edit data,会报错:The query results are not update ...
- SpringMVC常用接收Json的两种方法
@RequestBody JSONObject requestJson @RequestBody User user 一种是自定义加注解,由Spring负责绑定,一种是使用通用的JSONObject
- localStorage实现购物车数量单价和结算页面的实时同步
While there is life there is hope.一息若存,希望不灭 用localStorage实现简易的购物车数量单价和结算页面两个页面的实时同步: 购物车页面:实时更新页面,在i ...
- 后台首页品字形(frameset)框架搭建
get_defined_constants([true])//显示所有常量信息.参数true,表示分组显示,查看当前系统给我提供了哪些常量可以使用,包括自定义常量. __CONTROLLER__//获 ...
- html5压缩图片并上传
手机端图片有很大的,上传的时候很慢,这时候就要压缩一下了,有一个开源的js可以压缩图片的大小,开源地址如下:https://github.com/think2011/localResizeIMG3 代 ...
- CardboardCamera Prefab 中文笔记
在Cardboard的预制体(Prefab)中, CardboardCamera是最简单的一个,仅有两个子物体,一个PostRender, 一个PreRender,以及分别带的Camera组件. Ca ...