[LinQ2SQL一]SQL四大护法在LinQ中的应用

简介:
在前一些日子我在博客上写了一些关于.NET 3.x(C#3.0)的一些特性,其中也提到了一些关于LinQ的一些查询句法(语法),从今天开始我们来看看LinQ to SQL(以后简写为LinQ2SQL),就是对数据库的查询,以前叫做DLinQ。经常看到LinQ那到底是什么呢?他是 Language Integrated Query 的缩写,以一种类似SQL语句的形式来对对象进行操作的编程方法。

    在使用到LinQ时也会用到以前提到过的一些特性,如:匿名类型,自动化属性等等......所以如果没有阅读过C#新特性的朋友可以在下面找到:
    
    [.NET 3.x新特性一]自动属性,对象初始化及集合初始化


     [.NET 3.x新特性二]扩展方法

     [.NET 3.x新特性三]Lambda表达式

     [.NET 3.x新特性四]LinQ查询语法

     [.NET 3.x新特性五]匿名类型

    LinQ2SQL是一种ORM,它允许你通过编写.NET程序来控制或操作关系型数据库以达到查询的效果。你可以使用LinQ来检索数据库中的数据,也可以通过其进行数据的更新和添加。同时LinQ2SQL也支持事务,试图以及存储过程等等,通过VS2008(现在使用的是beta版本,下同)的LinQ2SQL设计器我们可以很容易定义一些实体类,我们可以通过添加一个新项来加入.dbml文件,并从数据库服务器窗口拖出数据表。下面我们来看看具体的例子:


     我们定义两个实体类,Artile和Category,我们也可以把存储过程拖到方法的窗口中,由于我们的存储过程和数据表的命名可能带有前缀或其他标识,我们可以查看属性窗口将他们的name属性改掉我们容易识别的名称。我们打开Designer.cs那个文件看一下,是不是生成了几个类,其中一个最重要的是以DataContext为后缀那个类(他以当前dbml文件名加DataContext为名称的类),他是这个LinQ的上下文,我们可以通过他来执行我们的操作。而上面两个是外键关系,他还生成了一个关系类,而且在Category类中好有一个Article的集合,在Article中也有一个关联属性,在赋值时还会对键值类型进行判断。

    下面我们来看看实际应用的一些例子(SQL四大护法<SELECT/INSERT/UPDATE/DELETE>):

    1.从数据库中检索数据<SELECT>

1               // 三个重载(),(string connectionString),(IDbConnection connection)
2              ItLivesNetDataContext cntx  =   new  ItLivesNetDataContext();
3               // 这个也可以在初始化ItLivesNetDataContext实例时直接进行初始化。
4              cntx.Connection  =   new  SqlConnection(
5                                    ConfigurationManager.ConnectionStrings[ 0 ].ConnectionString);
6              var articles  =  from a  in  cntx.Articles
7                             where a.CategoryID  ==   1
8                             orderby a.PostDate descending
9                             select a;

    上面的代码将返回数据库Articles表中类型ID为1的所有数据,并将其按发布时间进行降序排列。其中articles其实是IEnumerable<T>的实例,这个例子的T就是Article实体类。

    2.将新数据插入到数据库中<INSERT>

 1               // 插入新类型C++
 2              Category category  =   new  Category { CategoryName = " CPLUSPLUS " ,IsActived = true , ParentID  =   1  };
 3 
 4               // 插入新文章,类型为C++
 5              var article  =   new  Article { Subject  =   " C++入门 " , Author = " 网魂小兵 "  };
 6 
 7              category.Articles.Add(article);
 8 
 9              cntx.Categories.Add(category);
10 
11              cntx.SubmitChanges();
    
     3.更新新数据<UPDATE>

            Category category  =  cntx.Categories.Single(p  =>  p.CategoryName.ToUpper()  ==   " CSHARP " );

            category.IsActived 
=   true ;
            category.Description 
=   " UPDATE CSHARP! " ;

            cntx.SubmitChanges();

    4.删除数据库中的数据<DELETE>

1              var delArtiles  =  from s  in  cntx.Articles
2                               where s.CategoryName  ==   " CPLUSPLUS "
3                               select s;
4 
5              cntx.Articles.RemoveAll(delArtiles);
6              cntx.SubmitChanges();

    以上是SQL四大护法的例子,例子很简单一看就能够懂就不多解释了。在数据库中我们还经常要用到检索数据库的方法那就是分页检索数据库,然而在比较大的数据时我们往往会用到存储过程来完成这一职业。下面我们来看看LinQ在分页和调用存储过程上的一些基本操作,当然将要举例的存储过程不是分页检索数据库的存储过程,代码如下:

    1.分页检索Article

1              var pagedArticles  =  (from s  in  cntx.Articles
2                                   where s.CategoryName.ToUpper()  ==   " CSHARP "
3                                   orderby s.PostDate descending
4                                   select s).Skip( 100 ).Take( 20 );

    以上代码是在数据库中检索类型为C#的文章(按发表时间的降序排列)的第100后取20行记录,如果按每页20条记录算也就是第6页,其中我们用到了Skip()和Take()方法。

    2.在LinQ2SQL中应用存储过程

    在上面建立dbml文件时我们就通过拖拽把一个存储过程(GetParentCategories)拖到方法框中,我写这个存储过程的主要目的是获取当前类型的父类型列表。就一行代码,代码如下:

1      var categories  =  cntx.GetParentCategories( 1 );

    OK,今天的目的主要是从整体上来了解一下LinQ2SQL,我会在下面的博客文章中慢慢深入体会一下LinQ2SQL的乐趣,虽然在我的项目中不一定会用到这些。由于这些东东都会转换为标准的SQL语句在通过数据库引擎进行查询,所以效率上我想应该有所影响,不过现在只在于多多了解和学习.NET 3.x(C#3.0)给我们带来的新特性。

    (友情提醒:如果你使用前缀或者其他来对你的数据库表格进行命名,在建立dbml文件时一定要将其name属性改写成在C#编程中要用到的名称,否则在你编程时就会出现很难看的代码!!!)

本文转自网魂小兵博客园博客,原文链接:http://www.cnblogs.com/xdotnet/archive/2007/09/11/linq2sql_sql_select_insert_update_delete_paging.html,如需转载请自行联系原作者

相关文章
|
2月前
|
Java 前端开发 容器
Struts 2:在技术变革的风暴中航行,探索框架的革命性未来与创新融合之路
【8月更文挑战第31天】Struts 2作为一款成熟的企业级Java Web框架,凭借其稳定性和灵活性自2007年以来广受欢迎。它基于MVC设计模式,支持插件架构和RESTful服务,并能与Spring框架良好集成。然而,面对微服务架构和容器化技术(如Docker和Kubernetes)的兴起,Struts 2需提供更轻量级和支持指南来适应变化。通过深化与现代前端框架(如React和Vue.js)及AI技术的集成,并强化安全性与开发工具,Struts 2有望保持竞争力并迎接未来挑战。
36 0
|
2月前
|
SQL 测试技术 数据处理
|
2月前
|
SQL 数据采集 数据挖掘
深入理解SQL中的DISTINCT语句及其应用
【8月更文挑战第31天】
42 0
|
2月前
|
SQL 数据处理 数据库
SQL正则表达式应用:文本数据处理的强大工具——深入探讨数据验证、模式搜索、字符替换等核心功能及性能优化和兼容性问题
【8月更文挑战第31天】SQL正则表达式是数据库管理和应用开发中处理文本数据的强大工具,支持数据验证、模式搜索和字符替换等功能。本文通过问答形式介绍了其基本概念、使用方法及注意事项,帮助读者掌握这一重要技能,提升文本数据处理效率。尽管功能强大,但在不同数据库系统中可能存在兼容性问题,需谨慎使用以优化性能。
34 0
|
2月前
|
SQL 数据管理 关系型数据库
SQL与云计算:利用云数据库服务实现高效数据管理——探索云端SQL应用、性能优化、安全性与成本效益,为企业数字化转型提供全方位支持
【8月更文挑战第31天】在数字化转型中,企业对高效数据管理的需求日益增长。传统本地数据库存在局限,而云数据库服务凭借自动扩展、高可用性和按需付费等优势,成为现代数据管理的新选择。本文探讨如何利用SQL和云数据库服务(如Amazon RDS、Google Cloud SQL和Azure SQL Database)实现高效的数据管理。通过示例和最佳实践,展示SQL在云端的应用、性能优化、安全性及成本效益,助力企业提升竞争力。
45 0
|
2月前
|
SQL 监控 关系型数据库
"SQL性能瓶颈大揭秘:一步步教你揪出慢查询元凶,从根源解决数据库拖沓问题,让应用速度飞起来!"
【8月更文挑战第31天】作为一名数据库管理员或开发者,面对复杂系统时,运行缓慢的SQL查询常常令人头疼。本文将指导你如何诊断并解决这些问题。首先,通过性能监控工具识别出问题查询;其次,利用`EXPLAIN`分析其执行计划,了解索引使用情况;接着,优化查询语句,如使用合适索引、减少JOIN操作等;再者,优化数据库设计,采用分区表或调整硬件资源;最后,持续监控性能并调优。通过这些步骤,可有效提升数据库的整体性能。
31 0
|
2月前
|
SQL 存储 NoSQL
从SQL到NoSQL:理解不同数据库类型的选择与应用——深入比较数据模型、扩展性、查询语言、一致性和适用场景,为数据存储提供全面决策指南
【8月更文挑战第31天】在信息技术飞速发展的今天,数据库的选择至关重要。传统的SQL数据库因其稳定的事务性和强大的查询能力被广泛应用,而NoSQL数据库则凭借其灵活性和水平扩展性受到关注。本文对比了两种数据库类型的特点,帮助开发者根据应用场景做出合理选择。SQL数据库遵循关系模型,适合处理结构化数据和复杂查询;NoSQL数据库支持多种数据模型,适用于非结构化或半结构化数据。SQL数据库在一致性方面表现优异,但扩展性较差;NoSQL数据库则设计之初便考虑了水平扩展性。SQL使用成熟的SQL语言,NoSQL的查询语言更为灵活。
41 0
|
2月前
|
SQL 存储 NoSQL
数据模型与应用场景对比:SQL vs NoSQL
【8月更文第24天】随着大数据时代的到来,数据存储技术也在不断演进和发展。传统的SQL(Structured Query Language)数据库和新兴的NoSQL(Not Only SQL)数据库各有优势,在不同的应用场景中发挥着重要作用。本文将从数据模型的角度出发,对比分析SQL和NoSQL数据库的特点,并通过具体的代码示例来说明它们各自适用的场景。
56 0
|
3月前
|
SQL 存储 安全
SQL数据库:核心原理、应用实践与未来展望
在电子商务领域,SQL数据库用于存储商品信息、用户信息、订单信息等。通过SQL数据库,电商平台可以实现商品的快速检索、用户行为的跟踪分析、订单状态的实时更新等功能,提升用户体验和运营效率。
|
3月前
|
SQL 存储 数据挖掘
SQL数据:挖掘、管理与应用的深度探索
在数据驱动的时代, SQL作为数据库管理和查询的基石至关重要。本文探讨了SQL数据的挖掘、管理与应用。数据挖掘包括数据查询、聚合与关联,帮助发现数据模式和趋势以支持决策。数据管理确保数据的完整性、一致性和可用性,涉及存储、检索、更新和维护。而数据的应用则能推动业务发展、优化运营、提升客户体验和促进创新。通过高效利用SQL,企业可以最大化其数据资产的价值并在竞争中脱颖而出。
53 0
下一篇
无影云桌面