Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >非常帅气的Linq to sql

非常帅气的Linq to sql

作者头像
owent
发布于 2018-08-01 09:12:31
发布于 2018-08-01 09:12:31
84400
代码可运行
举报
文章被收录于专栏:owentowent
运行总次数:0
代码可运行

Linq是.NET 3里新增的东西,我在软件工程课程设计里初步应用到一点,而且主要用在Lambda表达式上,今天算是在好奇心驱动下尝试了一下在数据库方面的应用。

在数据库数据层自动化上,Linq强大地让我很惊喜。

文档看这里:http://msdn.microsoft.com/library/bb384429.aspx

微软的东西首先在微软的产品上用,我直接用Sql Server Express了,随便建了两个表(方法见:http://msdn.microsoft.com/zh-cn/library/ms247254.aspx)然后需要做的就是新建Linq to Sql项,然后把建好的表拖进来,一切都是可视化,so easy。

我无耻地发现,类似关联,外键这种东西,他直接给你分析出来了,而且可以任意修改,一切都是自动化的,华丽丽的微软。之后的代码操作异常简单,我只测试了查询和添加(具体代码见本文尾巴)。需要注意的问题是由于用的Sql Server Express而且文件是相对路径,造成的结果就是bin文件夹里一组数据库文件,工程目录下一组,默认用的是bin目录下的那一组。

但是对于其他数据库,因为微软一向不鸟,用起来就不太爽了。还好我找到一个Dblinq库(官方:http://dblinq.codeplex.com/)支持MySQL, PostgreSQL, Oracle, Ingres, SQLite, FireBird, and SQL Server。OK这个NB啦。不过到现在为止,这个东西还不能可视化。

但是,他有个自动生成代码的工具,已经可以让我们很方便地使用了。在下载完Dblinq包解压后,有个DbMetal.exe的文件,通过这个文件可以生成代码文件,具体怎么用就用DbMetal –help来看吧,我这里直接把我本地的Wordpress数据库当白鼠了。我的命令是

DbMetal.exe -provider=MySql -database:myblog -server:localhost -user:root -password:******(这个必须匿) -namespace:LinqTest -code:MyBlog.cs -sprocs

然后他帮我生成了个74Kb的文件,文件名是MyBlog.cs,生成的时候要注意的就是因为我用的是0.2.0.1版本,需要把MySql.Data.dll复制到DbMetal的根目录里。其他数据库的应该也差不多吧。

运行结果就不贴了,然后贴出我的测试代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Linq;

#region MYSQL
using MySql.Data.MySqlClient;
#endregion

namespace LinqTest {
    class Program {
        static void Main(string[] args) {
            // MySql的初始化
            string connStr = @"server=localhost;database=myblog;user=root;pwd=******(这个同样要匿);port=3306";
            MySqlConnection conn = new MySqlConnection(connStr);
            var tm = new MyBLog(conn);
            // Sql Server Express 的初始化
            var t = new DataClassesDataContext();

            // 第一个表
            var rs1 = from sample in t.sample
                     select sample;
            foreach (var i in rs1) {
                Console.WriteLine("id: " + i.ID + " val: " + i.);
            }

            // 第二个表
            var rs2 = from Sample2 in t.Sample2
                 where Sample2.相关ID > 1
                 select Sample2;
            var rl2 = rs2.ToList();
            foreach (var i in rl2) {
                Console.WriteLine("id: " + i.PID + " sid: " + i.相关ID + " date: " + i.日期);
            }

            // 插入操作
            Sample2 s2 = new Sample2() {
                PID = rl2.Last().PID + 1,
                相关ID = rl2.Last().相关ID,
                日期 = DateTime.Now
            };
            t.Sample2.InsertOnSubmit(s2); // 木有错,这样就标记为插入了
            t.SubmitChanges();// 因为之后没有查询,所以这里要Submit一下,否则不会进数据库

            // MySql和Dblinq
            var rs3 = (from WpCommentMeta in tm.WpCommentMeta
                        where WpCommentMeta.MetaID > 10
                        orderby WpCommentMeta.CommentID
                        select WpCommentMeta).Skip(3).Take(3);
            foreach (var i in rs3.ToList()) {
                Console.WriteLine("MetaID: " + i.MetaID + " CommentID: " + i.CommentID);
                Console.WriteLine("Key:\r\n" + i.MetaKey + "\r\nValue:\r\n" + i.MetaValue);
                Console.WriteLine("");
            }
        }
    }
}

另外,有个东西忘了提了。关于效率的问题。

第一次尝试Linq to Sql的时候我就有个疑问,他的效率怎么样?因为他可以有很多的筛选比如上文代码中的where和order,这个不是问题,问题是Skip和Take函数,我想如果每次都是把数据全select出来然后筛选效率必然很慢,我试了一下MySQL的这一段的调试(因为我的Sql Server是Express版的没有分析工具),我很惊喜地发现Linq最为神奇的地方在于在写完select的那一句的时候并没有连接数据库,Linq会在需要访问数据的时候从已知条件生成SQL语句从提交给数据库,然后处理就如上文,在 var rs3那一句并没有访问数据库,而是在rs3.ToList()执行时访问的数据库,并且在日志记录里生成的SQL语句为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT `comment_id`, `meta_id`, `meta_key`, `meta_value`
FROM `myblog`.`wp_commentmeta`
WHERE (`meta_id` > 10)
ORDER BY `comment_id` LIMIT 3 OFFSET 3

可以看出,生成的SQL非常给力的。另外也是这个延迟执行的原因,SQL语句会在查询的时候提交,在t.Sample2.InsertOnSubmit(s2); 的后面要加上  t.SubmitChanges(); 因为之后没有查询,没有访问数据库,所以这里要Submit一下,否则内存里的对象不会提交,也就不会进数据库,这条记录就没有了。

Linq的体验暂时就到这里吧,非常神奇。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Dapper的封装、二次封装、官方扩展包封装,以及ADO.NET原生封装
前几天偶然看到了dapper,由于以前没有用过,只用过ef core,稍微看了一下,然后写了一些简单的可复用的封装。 Dapper的用法比较接近ADO.NET所以性能也是比较快。所以我们先来看看使用ADO.NET的时候我们怎么实现代码复用的封装。 ◆ 一、ADO.NET的封装案例 利用反射对ADO.NET进行封装,看代码: DBHelper.cs:这边用的是mysql,如果要用sqlserver将MySqlConnection换成SqlConnection即可。 这个写的比较简单,如果有复杂的sql可能就支
IT大咖说
2022/03/14
3K0
LINQ to SQL 使用指南
LINQ to SQL 是 Microsoft 提供的一种用于 .NET Framework 的对象关系映射器(ORM),它允许开发人员使用 LINQ 查询语法来操作数据库中的数据,而无需直接编写 SQL 语句。这使得数据操作变得更加简单和直观。本文将从基础概念入手,逐步深入介绍 LINQ to SQL 的使用方法,并探讨一些常见的问题及其解决策略。
Jimaks
2024/10/09
3720
Linq基础知识小记三
1、子查询 Linq中的子查询思想和Sql中的子查询其实差不多, 对于方法语法,一个子查询包含在另一个子查询的Lambda表达式中,代码如下: string[] names = { "James", "Kobe", "Curry", "Durrent" }; IEnumerable<string> result = names.OrderBy(n => n.Split().Last()); n.Split().Last()就是一个子查询 下面通过一个例子来讲解Linq子查询的两种不同的方式.找出一个IEnu
郑小超.
2018/01/26
9490
一步一步学Linq to sql(九):其它补充
5、现在就可以照常进行其它工作了。使用sqlmetal可以很方便的同步数据库与实体和映射文件。每次修改数据库结构,从dbml设计器上删除表、存储过程然后再重新添加也是很麻烦的事情。
aehyok
2018/09/11
3220
一步一步学Linq to sql(九):其它补充
LINQ to SQL(3):增删改查
上一节中,我已经写过了利用OR设计器生成对象模型的方式,其实生成这样对数据库进行映射的模型的方式不只这一种,不过VS为我们提供的这种设计器真的是很强大,在实际应用中也是经常用到的 这一节写利用LINQ to SQL对数据库进行的简单增删改查的操作的实现方式,这里注意是“简单”,复杂的查询呢,我将会在下一篇或者下下一篇中写到,那里会有很多的内容,比如处理并发啦,自定义LINQ表达式查询啦,等等的这些,而下一篇中我计划写一些关于扩展OR设计器生成的代码以及向实体类中添加验证的一些东西,因为毕竟我们使用OR设计器
小白哥哥
2018/03/07
7350
LINQ to SQL(3):增删改查
LINQ能不能用系列(二)LINQ to SQL 效率比对
前言 很多人听说过LINQ TO SQL与ADO.NET传统方式用于不同的环境,LINQ TO SQL与ADO.NET传统方式也没有可比性,就像公交车与私家车一样,虽然是车但用途完全不同,但很少有人去探究,究竟为什么他们不同,他们不同的原因是什么,这我觉得是一个好的程序和一个普通程序最主要的区别之一。下面一起来看LINQ TO SQL效率到底如果吧。 内容 测试环境:net framework 4.0 + Sql Server 2008 测试用途:100w条数据 like 查询,原因添加、修改、删除消耗
磊哥
2018/05/08
1.2K0
LINQ能不能用系列(二)LINQ to SQL 效率比对
一步一步学Linq to sql(八):继承与关系
1.首先定义的是Topic实体基类,然后两个子类的继承,NewTopic--主题帖,Reply--回复帖。 2.Topic类上的特性,下面先来看一下特性类
aehyok
2018/09/11
3880
一步一步学Linq to sql(八):继承与关系
Linq:基本语法form ,select, where(2)
一:基础知识 1:linq查询表达式必须以from子句开头 2:linq查询表达式必须以select 或者group子句结尾 3:linq查询表达式可以包含0个或多个where子句,一个where子句可以包含1个或多个布尔条件表单时
liulun
2022/05/09
8330
【大型网站技术实践】初级篇:搭建MySQL主从复制经典架构
  随着网站业务的不断发展,用户量的不断增加,数据量成倍地增长,数据库的访问量也呈线性地增长。特别是在用户访问高峰期间,并发访问量突然增大,数据库的负载压力也会增大,如果架构方案不够健壮,那么数据库服务器很有可能在高并发访问负载压力下宕机,造成数据访问服务的失效,从而导致网站的业务中断,给公司和用户造成双重损失。那么,有木有一种方案能够解决此问题,使得数据库不再因为负载压力过高而成为网站的瓶颈呢?答案肯定是有的。
Edison Zhou
2018/08/20
5260
【大型网站技术实践】初级篇:搭建MySQL主从复制经典架构
C#实战:LighthouseDB轻量数据库服务介绍和案例实践
LighthouseDB轻量数据库服务基于腾讯云自研的新一代云原生数据库 TDSQL-C,融合了传统数据库、云计算与新硬件技术的优势,100%兼容 MySQL,实现超百万级 QPS 的高吞吐,128TB 海量分布式智能存储,保障数据安全可靠。
小明互联网技术分享社区
2024/04/15
4980
C#实战:LighthouseDB轻量数据库服务介绍和案例实践
LINQ to SQL(1):基础入门
LINQ to SQL是在SQL SERVER数据库上设置一个强类型化界面的方式,LINQ to SQL提供的方式是目前我所见到查询SQL SERVER最简单也是最有效的方式,他可以使用自定义的类型与数据表甚至存储过程进行对应,而不像我们使用ADO.NET那样,把更多的功夫用在数据类型转换等等的问题上,当程序运行的时候,LINQ to SQL会将我们使用自己的语言定义的模型中的语言继承查询转换为SQL,然后将他在数据库上执行,然后将返回的结果转换为我们自定义的类对象,使用过nhibernate或者ibati
小白哥哥
2018/03/07
1.4K0
LINQ to SQL(1):基础入门
EntityFramework数据持久化复习资料5、LINQ概述与应用(超终点)
        本地数据库链接:【.】或【127.0.0.1】         登陆方式1:【本地登陆】         登陆方式2:账号【sa】 pwd【admin】         测试数据库名称:【mytest】         排序规则:【Chinese_PRC_CI_AS】
红目香薰
2023/02/27
2.2K0
EntityFramework数据持久化复习资料5、LINQ概述与应用(超终点)
轻量级ORM框架初探-Dapper与PetaPoco的基本使用
  EF是传统的ORM框架,也是一个比较重量级的ORM框架。这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择。
Edison Zhou
2018/08/20
1.8K0
轻量级ORM框架初探-Dapper与PetaPoco的基本使用
一步一步学Linq to sql(七):并发与事务
为了看起来清晰,我已经事先把所有分类为1产品库存修改为相同值了。然后执行下面的程序:
aehyok
2018/09/11
5690
一步一步学Linq to sql(七):并发与事务
C# 学习笔记(14)—— LINQ
LINQ 是 Lanuage Integrated Query 的缩写,即“语言集成查询”的意思。众所周知,做软件开发离不开数据的,你肯定听过SQL数据库、Oracle数据库或本地XML文档等。每种数据源都有自己的查询语言,例如SQL数据库有自己的SQL语言,。LINQ的提出就是为了提供一种跨越各种数据源的统一的查询方式,它主要包括四个组件——Linq to Objects、Linq to XML、Linq to DataSet 和 Linq to SQL
Karl Du
2023/10/20
2980
一步一步学Linq to sql(二):DataContext与实体
 DataContext类型(数据上下文)是System.Data.Linq命名空间下的重要类型,用于把查询句法翻译成SQL语句,以及把数据从数据库返回给调用方和把实体的修改写入数据库。
aehyok
2018/09/11
8630
一步一步学Linq to sql(二):DataContext与实体
c# LINQ查询方法(1)
Language Integrated Query 语言集成查询 可以使得查询操作通过编程语言自身来表示,而不是嵌入字符串SQL语句。
MaybeHC
2024/04/23
1290
c# LINQ查询方法(1)
【C# 基础精讲】LINQ 基础
LINQ(Language Integrated Query)是一项强大的C#语言特性,它使数据查询和操作变得更加简洁、灵活和可读性强。通过使用LINQ,您可以使用类似SQL的语法来查询各种数据源,如集合、数组、数据库等。本文将介绍LINQ的基础概念、常见的LINQ操作和示例,以及如何在C#中利用LINQ进行数据查询和处理。
繁依Fanyi
2023/10/12
3800
【C# 基础精讲】LINQ 基础
使用VS2015和Nhibernate实现与MySql数据库连接,实现增删改查操作
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
bering
2019/12/03
1.5K0
一步一步学Linq to sql(十):多层架构MVC WCF Linq
 A,MVC网站项目 MvcOperation:留言簿表现层  B,类库项目 Contract:定义数据访问服务的契约  C,类库项目 Service:定义数据访问服务  D,类库项目Entity:留言簿实体  E,控制台项目Host:承载数据访问服务
aehyok
2018/09/11
5380
一步一步学Linq to sql(十):多层架构MVC WCF Linq
相关推荐
Dapper的封装、二次封装、官方扩展包封装,以及ADO.NET原生封装
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档