第三章LINQ TO SQL高级查询

合集下载

图文结合教你用好LINQ to SQL

图文结合教你用好LINQ to SQL

不过谈到.NET平台,ORM框架似乎相对混乱了点。

很多朋友问我的时候,往往会这样问:NHibernate、NBear和Castle该选择哪个?而当我反问:为什么不适用微软自带的Linq to SQL 呢?对方经常会迷茫和不解。

我觉得这是个很奇怪的现象。

依照我个人的实践,我认为当需要快速构建一个中小型项目时,Linq to SQL是一个很好的选择。

你至少有以下理由可以选择它:i. 它是微软自己的产品,和.NET平台有着天生的适应性。

如果你使用.NET Framework3.5和 VS2008开发环境,它本身就集成在里面了,同时VS2008对于Linq to SQL 给予了诸多方便的支持。

使用它,你不仅在开发和部署时不用考虑第三方库,更可以尽情享受VS2008带来的种种方便。

ii. 上手十分容易,使用十分轻松,通常,你不需要编写一行代码,也不用写任何XML 配置,完全通过可视化拖拽就能完成ORM层的构建。

iii. 功能丰富,使用便捷。

当轻松构建好ORM层后,你就可以更轻松的操纵数据库了。

Linq to SQL提供了丰富的功能,完全可以满足日常数据访问的需求。

使用方法也非常简单、灵活。

有这么好的理由,我真想不通为什么那么多人不愿去选择它。

我想来想去,也许有两个重要原因,一是把LINQ和Linq to SQL混为一谈了,二是受前段时间“LINQ已死”的误导,觉得微软已经抛弃Linq to SQL了。

关于这两点,我就不细说了,简略澄清一下:首先,LINQ是从.NET Framework3.0开始,.NET平台上引入的一种新式语言特性,狭义一点,你可以讲它理解成一种新式语法,主要是针对迭代数据操作的,所以,也许LINQ 叫做“数据迭代引擎(Data Iterative Engine)”更合适,之所以不着样命名,我想微软可能不愿意让自己产品的简写为“DIE”吧。

:-)而Linq to SQL是LINQ在数据库访问方面的一个应用框架,完全是两码事。

一步一步学Linq to sql

一步一步学Linq to sql
Console.WriteLine(ername);
意义不是很大,纯粹解决机械劳动。编译器自动为你生成get、set操作以及字段,并且你不能使用字段也不能自定义get、set操作,不过你可以分别定义get和set的访问级别。
对象初始化器
publicclassPerson
{
publicstringusername {get;set; }
Table<Customer> Customers = ctx.GetTable<Customer>();
GridView1.DataSource =fromcinCustomerswherec.CustomerID.StartsWith("A")selectnew{顾客ID=c.CustomerID,顾客名=,城市=c.City};
Console.WriteLine("username:{0} age:{1}", ername, data.age);
匿名类型允许开发人员定义行内类型,无须显式定义类型。常和var配合使用,var用于声明匿名类型。定义一个临时的匿名类型在LINQ查询句法中非常常见,我们可以很方便的实现对象的转换和投影。
今天就说到这里,再见!
DataContext与实体
DataContext
DataContext类型(数据上下文)是System.Data.Linq命名空间下的重要类型,用于把查询句法翻译成SQL语句,以及把数据从数据库返回给调用方和把实体的修改写入数据库。
DataContext提供了以下一些使用的功能:
?以日志形式记录datacontext生成的sql?执行sql包括查询和更新语句?创建和删除数据库datacontext是实体和数据库之间的桥梁那么首先我们需要定义映射到数据表的实体

linq转化为sql语句的方法

linq转化为sql语句的方法

linq转化为sql语句的方法Linq转化为SQL语句的方法概述Linq(Language Integrated Query)是微软推出的一种用于查询和操作数据的统一编程模型。

它可以在不同的数据源上执行查询,例如关系型数据库、XML文档等。

在开发过程中,我们常常需要将Linq 表达式转化为相应的SQL语句,以便对数据库进行操作。

本文将详细介绍多种将Linq转化为SQL语句的方法。

1. LINQ to SQL基本概念LINQ to SQL是一种将LINQ查询转化为SQL语句的方法。

它是Entity Framework的一部分,提供了一种直接在.NET应用程序中使用对象来表示和操作关系型数据库的方式。

在LINQ to SQL中,可以通过DataContext对象来执行查询,并将查询结果转化为SQL语句。

示例代码using System;using ;using ;public class Program{public static void Main(){// 创建DataContext对象,连接数据库DataContext context = new DataContext("Data Sour ce=.;Initial Catalog=MyDatabase;Integrated Security=True ");// 创建查询表达式var query = from c in <Customer>()where == "Beijing"select c;// 执行查询并获取SQL语句string sql = (query).CommandText;// 输出SQL语句(sql);}}2. Entity Framework基本概念Entity Framework是微软推出的一种对象关系映射(ORM)工具,可以映射.NET对象与数据库中的表、视图等关系。

使用LINQ to SQL访问数据库

使用LINQ to SQL访问数据库

Copyright@2009 College of ITSoft (HDU)
Version No: 2.0
16
使用Object Relational Designer创建实体 1. 选择站点的添加新项 2. 选择LINQ to SQL类 3. 打开Object Relational Designer后将一个或多 个表拖放至Designer面板上
Copyright@2009 College of ITSoft (HDU)
Version No: 2.0
14
手工创ቤተ መጻሕፍቲ ባይዱ实体
using System.Data.Linq.Mapping; [Table] public class TempInfo { [Column (IsPrimaryKey=true)] public string uID { get; set; } [Column(IsPrimaryKey=true)] public DateTime cDate { get; set; } [Column] public double TempAM { get; set; } [Column] public double TempPM { get; set; } [Column] public string Des { get; set; } }
Copyright@2009 College of ITSoft (HDU)
Version No: 2.0
11
C#语言中的子句 语言中的子句
from 指定数据源以及用来迭代数据源的变量 where 过滤查询的结果 select 指定查询结果中的项 group 通过某一关键字对相关的值进行聚合 into 存储聚合中的结果,或连接到一个临时变 量 orderby将查询结果按升序或降序进行排序 join 通过一个关键字,对两个数据源进行连接 let 创建一个临时变量,来表示子查询的结果

LINQ to SQL 数据上下文

LINQ to SQL 数据上下文

LINQ to SQL 数据上下文1. 概述通过LINQ to SQL基础篇我们对LINQ to SQL有了一个概要的认识,本文我们来认识在LINQ to SQL 中处于非常重要地位的一个对象——DataContext(数据上下文),它位于System.Data.Linq命名空间下,是实体和数据库之间的一个桥梁。

DataContext主要提供了如下几个功能:A.记录生成的SQL语句,这对于我们调试LINQ to SQL时是非常有用的,可以通过查看记录的SQL语句,来分析LINQ to SQL在数据库中执行了什么。

B.执行SQL语句。

LINQ to SQL通过查询句法和Lambda表达式提供了强大的功能,能完成T-SQL 90%以上的功能,如果在开发中,遇到非常复杂的查询,无法用查询句法或者Lambda表达式来实现,你可以使用自己熟悉的T-SQL来完成。

C.创建、删除数据库。

在第一篇中我就说过,LINQ to SQL是一个轻量级的O/R Mapping,使用LINQ to SQL可以不用考虑数据库表之间的关系,直接考虑你的业务对象关系,设计好实体类之后,通过DataContext可以自动创建数据库。

2. 创建DataContext在DataContext中,提供了如下四种重载方式的构造函数,就是说我们可以通过四种方式来创建一个DataContext对象:Code1:public DataContext(IDbConnection connection);public DataContext(string fileOrServerOrConnection);public DataContext(IDbConnection connection, MappingSource mapping);public DataContext(string fileOrServerOrConnection, MappingSource mapping);我们经常使用的有两种:一是使用连接字符串,作为DataContext构造函数的参数:Code2public DataContext CreateDataContext(){DataContext db = new DataContext(@"Server=Esint-lhj\Sql2005;User Id=sa;Password=sql2005;Database=MSPetShop4");return db;}这里为了避免硬编码连接字符串,你也可以把连接字符串放在配置文件中。

第三章LINQ TO SQL高级查询

第三章LINQ TO SQL高级查询


高级查询
– –
增删改方式 • • • 增加数据
– – – 一个对象,一对多
删除数据
一个对象,主从关系
更新数据
一个对象,多条记录,多表更新
增删改方式
新增数据
– –
一个对象 一对多
新增方式 新增一个对象:
var stu = new Model.stuInfo { stuNo="s25308", stuName="足下 足下", 足下 stuAge=20, stuSex="男", 男 stuClass=2 }; //保存到对象集合 保存到对象集合 db.stuInfo.InsertOnSubmit(stu); db.SubmitChanges();
从数据库中删除一个对象
//从表 从表 var stu = from s in db.stuInfo 增删改方式 where s.stuClass == 3 select s; 删除主从表条: //主表 主表 var classic = db.classic.First(c => c.classID == 3); //先删除从表数据 先删除从表数据 foreach (var s in stu) { //先删除学生成绩表对应学号的学生 先删除学生成绩表对应学号的学生 var score = (from sc in db.stuMarks where先删除从表数据,再删除主表数据 sc.stuNo == s.stuNo select sc).First(); db.stuMarks.DeleteOnSubmit(score); db.stuInfo.DeleteOnSubmit(s); } //在删除主表 在删除主表 db.classic.DeleteOnSubmit(classic); //提交 提交 db.SubmitChanges();

LINQ TO SQL 连接查询与联合查询

LINQ TO SQL 连接查询与联合查询

LINQ TO SQL 连接查询与联合查询Join操作适用场景:在我们表关系中有一对一关系,一对多关系,多对多关系等。

对各个表之间的关系,就用这些实现对多个表的操作。

说明:在Join操作中,分别为Join(Join查询), SelectMany(Select一对多选择)和Gro upJoin(分组Join查询)。

该扩展方法对两个序列中键匹配的元素进行inner join操作SelectMany说明:我们在写查询语句时,如果被翻译成SelectMany需要满足2个条件。

1:查询语句中没有join和into,2:必须出现EntitySet。

在我们表关系中有一对一关系,一对多关系,多对多关系等,下面分别介绍一下。

1.一对多关系(1 to Many):语句描述:Customers与Orders是一对多关系。

即Orders在Customers类中以Enti tySet形式出现。

所以第二个from是从c.Orders而不是db.Orders里进行筛选。

这个例子在From子句中使用外键导航选择伦敦客户的所有订单。

语句描述:这一句使用了p.Supplier.Country条件,间接关联了Supplier表。

这个例子在Where子句中使用外键导航筛选其供应商在美国且缺货的产品。

生成SQL语句为:2.多对多关系(Many to Many):说明:多对多关系一般会涉及三个表(如果有一个表是自关联的,那有可能只有2个表)。

这一句语句涉及Employees, EmployeeTerritories, Territories三个表。

它们的关系是1:M:1。

Employees和Territories没有很明确的关系。

语句描述:这个例子在From子句中使用外键导航筛选在西雅图的雇员,同时列出其所在地区。

这条生成SQL语句为:3.自联接关系:语句描述:这个例子在select 子句中使用外键导航筛选成对的雇员,每对中一个雇员隶属于另一个雇员,且两个雇员都来自相同城市。

sql 高级查询总结

sql 高级查询总结

sql 高级查询总结SQL高级查询总结在SQL中,高级查询是指使用复杂的语法和特殊的操作符来满足特定的查询需求。

下面是SQL高级查询的一些常见技巧和用法:1. 子查询:子查询是将一个查询结果作为另一个查询的输入。

它可以用在WHERE子句、FROM子句或SELECT子句中。

通过使用子查询,我们可以在同一语句中完成多个查询。

2. 联结:联结是将两个或多个表中的数据按照指定的关联条件进行连接。

常见的联结类型有内联结、外联结和自然联结。

联结可以用来获取多个表中的相关信息,并且可以根据需要进行过滤、排序和分组。

3. 窗口函数:窗口函数是一种高级的聚合函数,它可以在查询结果上进行计算,并返回计算结果。

窗口函数可以在分组查询的基础上,对每个分组中的数据进行更复杂的操作,例如排序、排名和累计计算。

4. 常用函数:SQL提供了许多内置函数,用于处理和转换数据。

一些常见的函数包括聚合函数(SUM、AVG、MAX、MIN等)、字符串函数(CONCAT、SUBSTRING、LENGTH等)、日期函数(DATE、TIME、YEAR等)和数学函数(ABS、ROUND、FLOOR等)。

5. 条件逻辑:使用CASE语句可以实现条件逻辑,根据不同的条件返回不同的结果。

CASE语句可以在SELECT子句、WHERE子句和ORDER BY子句中使用,用于根据不同的条件进行分支判断。

6. 索引优化:为了改善查询性能,可以使用索引来加速检索过程。

通过在关键列上创建索引,可以减少查询时需要扫描的行数,从而提高查询效率。

需要根据具体情况选择合适的索引类型和优化策略。

总结:通过掌握SQL高级查询的技巧和用法,可以更灵活地处理复杂的查询需求。

使用子查询、联结、窗口函数和条件逻辑可以实现更精确和高效的数据查询和操作。

合理使用索引和优化查询语句的性能可以提高数据库的效率和响应速度。

熟练掌握这些高级查询的方法,对于开发人员和数据库管理员来说是非常重要的技能。

asp.net使用LINQ to SQL连接数据库及SQL操作语句用法分析

asp.net使用LINQ to SQL连接数据库及SQL操作语句用法分析

本文实例讲述了使用LINQ to SQL连接数据库及SQL操作语句用法。

分享给大家供大家参考,具体如下:LINQ简介LINQ:语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展。

它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。

LINQ是一门查询语言,和SQL一样,通过一些关键字的组合,实现最终的查询。

LINQ的分类LINQ to ObjectLINQ to XMLLINQ to SQLLINQ to DataSetLINQ to 命名空间为System.Linq;LINQ查询语法:from 临时变量in 集合对象或数据库对象where 条件表达式[orderby条件][group by 条件]select 临时变量中被查询的值例:from c in Student select c;假设Student是一个数据库表对应的一个实体类则查询语句为:from c in Student select c;//整表查询from c in Student where =="张三" select c;//查询姓名为张三的所有信息其中C为临时变量,可任意取。

查询几个字段1、查询student表中的几个字段代码如下:var query=from c in student select new {c.number,,c.age};2、查询student表中的几个字段,并重新设定列名代码如下:var query=from c in student select new {学号=c.number,姓名=, 年领=c.age};注意事项linq查询语句必须以from子句开始,以select 子句结束。

Linq是在.NET Framework 3.5 中出现的技术,所以在创建新项目的时候必须要选3.5或者更高版本,否则无法使用。

精品IT教程LINQTOSQL基础教程及学习笔记

精品IT教程LINQTOSQL基础教程及学习笔记

LINQ TO SQL 学习笔记1. 预备知识 (3)1.1.Linq介绍 (3)1.2.隐含类型局部变量 (3)1.3.匿名类型 (4)1.4.扩展方法 (5)1.5.自动属性 (6)1.6.对象初始化器/集合初始化器 (6)mbda表达式与Lambda表达树 (7)1.8.查询句法 (9)2. DataContent与实体 (10)2.1.DataContent (10)2.2.实体类 (10)2.3.强类型DataContent (11)2.4.日志功能 (11)2.5.探究查询 (12)2.6.执行查询 (13)2.7.创建数据库 (13)2.8.使用DbDataReader数据源 (14)2.9.生成实体类 (14)3. 增删改 (15)3.1.插入(Insert) (15)3.2.更新(Update) (18)3.3.删除(Delete) (18)3.4.使用Attach更新(Update with Attach) (19)3.5.使用Attach更新和删除(Update and Delete with Attach) (21)4. 查询句法 (22)4.1.Select (22)4.2.Where (23)4.3.OrderBy (23)4.4.分页 (24)4.5.分组 (24)4.6.Distinct (25)4.7.Union (25)4.8.Contact (25)4.9.取相交项 (26)4.10.排除相交项 (26)4.11.子查询 (27)4.12.In操作 (27)4.13.Join (28)5. 存储过程 (28)5.1.普通存储过程 (28)5.2.带参数存储过程 (30)5.3.带返回值的存储过程 (30)5.4.多结果集存储过程 (30)5.5.使用存储过程新增/更新/删除数据 (31)6. 探究特性 (33)6.1.延迟执行 (33)6.2.DataLoadOptions (33)6.3.DataLoadOptions限制 (34)6.4.主键缓存 (35)6.5.DataContent隔离 (35)7. 并发与事务 (35)7.1.检测并发 (35)7.2.解决并发 (36)7.3.事务处理 (38)8. 其他 (40)Linq学习笔记(1.6)——ToArray、ToList、ToDictionary、OfType (40)1.预备知识1.1.Linq介绍LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性。

Linq to sql 实现多条件的动态查询

Linq to sql 实现多条件的动态查询

Linq to sql 实现多条件的动态查询(方法一)多条件动态查询在开发中太常见了,使用sql语句拼接很容易实现,但是在使用linq 的时候我却觉得很麻烦,思来想去,其实不然,linq 实现多条件动态查询一样可以变的很简单。

话不多说,直接上例子,供大家参考。

根据5个动态条件查询:[csharp]view plaincopyprint?1./// <summary>2./// Linq to sql 多字段动态查询3. /// </summary>4./// <returns></returns>5.private List<TVacant> ViewBinding(ModelDataContext db,string fyno,string brd,string area,string city,string pos)6.{7. Expression<Func<TVacant, bool>> expr = n => GetCondition(n,fyno,brd,area,city,pos);8. var xQuery = acant.Where<TVacant>(pile());9. return xQuery.ToList<TVacant>();10.}11.private bool GetCondition(TVacant tb,string fyno,string brd,string area,string city,string pos)12.{13. bool boolResult = true;14. if (!String.IsNullOrEmpty(fyno))15. {16. boolResult &= tb.fy_no == fyno;17. }18. if (!String.IsNullOrEmpty(brd))19. {20. boolResult &= tb.brd_no == brd;21. }22. if (!String.IsNullOrEmpty(area))23. {24. boolResult &= tb.area_no == area;25. }26. if (!String.IsNullOrEmpty(city))27. {28. boolResult &= tb.city_no == city;29. }30. if (!String.IsNullOrEmpty(pos))31. {32. boolResult &= tb.pos_no == pos;33. }34. return boolResult;35.}LINQ to SQL语句(23)之动态查询生成的SQL语句为:下面一张截图显示了怎么动态生成动态查询的过程生成的SQL语句为:4.Union下面的例子使用表达式树动态查询顾客和雇员同在的城市。

asp.net使用LINQ to SQL连接数据库及SQL操作语句用法分析

asp.net使用LINQ to SQL连接数据库及SQL操作语句用法分析

本文实例讲述了使用LINQ to SQL连接数据库及SQL操作语句用法。

分享给大家供大家参考,具体如下:LINQ简介LINQ:语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展。

它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。

LINQ是一门查询语言,和SQL一样,通过一些关键字的组合,实现最终的查询。

LINQ的分类LINQ to ObjectLINQ to XMLLINQ to SQLLINQ to DataSetLINQ to 命名空间为System.Linq;LINQ查询语法:from 临时变量in 集合对象或数据库对象where 条件表达式[orderby条件][group by 条件]select 临时变量中被查询的值例:from c in Student select c;假设Student是一个数据库表对应的一个实体类则查询语句为:from c in Student select c;//整表查询from c in Student where =="张三" select c;//查询姓名为张三的所有信息其中C为临时变量,可任意取。

查询几个字段1、查询student表中的几个字段代码如下:var query=from c in student select new {c.number,,c.age};2、查询student表中的几个字段,并重新设定列名代码如下:var query=from c in student select new {学号=c.number,姓名=, 年领=c.age};注意事项linq查询语句必须以from子句开始,以select 子句结束。

Linq是在.NET Framework 3.5 中出现的技术,所以在创建新项目的时候必须要选3.5或者更高版本,否则无法使用。

linq expression sql 拼接查询条件

linq expression sql 拼接查询条件

linq expression sql 拼接查询条件LINQ(Language-Integrated Query,语言集成查询)是.NET开发中的一种查询技术,它为开发人员提供了一种结构化、直观的方法来查询数据。

与传统的SQL查询相比,LINQ更加灵活和强大,并且可以通过与C#或等编程语言的集成使用,使查询过程更加简洁和高效。

在LINQ 中,我们可以使用LINQ表达式或方法来构建查询,其中的查询条件可以通过拼接方式来实现。

本文将以LINQ表达式和SQL拼接查询条件为主题,详细介绍如何使用LINQ来拼接查询条件。

文章将从基本概念到具体实例进行讲解,以便读者全面了解和掌握这一查询技术。

首先,我们需要了解LINQ表达式是如何构建查询条件的。

LINQ表达式是一种类似于代码的结构,它使用一系列操作符和关键字来描述查询的目的和条件。

在LINQ表达式中,可以使用where子句来添加查询条件。

例如,以下是一个简单的LINQ表达式:csharpvar query = from p in productswhere p.Price > 10 && p.Category == "Electronics"select p;在这个表达式中,我们使用了where子句来添加两个查询条件:价格大于10和类别为"Electronics"。

这样,只有符合这两个条件的产品才会被返回。

然而,在某些情况下,我们可能需要根据不同的情况来动态拼接查询条件。

例如,在一个搜索功能中,用户可以通过输入不同的条件来查询数据。

这时,我们可以使用LINQ表达式动态拼接查询条件。

为了实现动态拼接查询条件,我们可以使用LINQ的链式调用方式,即在LINQ表达式中逐步添加查询条件。

首先,我们需要定义一个初始查询,该查询包含我们所查询的数据源。

假设我们要查询的是一个名为"products"的数据表,我们可以在LINQ表达式中指定该数据表为初始查询。

linq to sql 系列之 linq to sql性能优化技巧

linq to sql 系列之 linq to sql性能优化技巧

linq to sql 是一个代码生成器和ORM 工具,他自动为我们做了很多事情,这很容易让我们对他的性能产生怀疑。

但是也有几个测试证明显示在做好优化的情况下,linq to sql 的性能可以提升到 datareader 性能的93%。

因此我总结了linq to sql 的10个性能提升点,来优化其查询和修改的性能。

1. 不需要时要关闭 DataContext 的ObjectTrackingEnabled 属性1 using (NorthwindDataContext context = new NorthwindDataContext())2 {3 context.ObjectTrackingEnabled = false;4 }关闭这个属性会使linq to sql 停止对对象的标识管理和变化跟踪。

但值得注意的是关闭ObjectTrackingEnabled 意味着也将DeferredLoadingEnabled 属性设置为false ,当访问相关表时会返回null 。

2. 不要把所有的数据对象都拖到一个DataContext 中一个DataContext 代表一个工作单元,并非整个数据库。

如果几个数据库对象之间没有关系,或者在程序中用不到的数据库对象(例如日志表,批量操作表等等),让这些对象消耗内存空间和DataContext 对象跟踪服务是完全没有必要的。

建议将所有的数据库对象按工作单元分给几个DataContext 来处理。

你也可以通过构造函数配置这些DataContext 使用相同的数据库连接,这样也可以发挥据库连接池的用途。

3. CompiledQuery --- 有必要就得用在创建一个linq to sql 表达式并将它转换成对应的sql 语句执行的过程,需要几个关键的步骤1) 创建表达式树2) 转换成sql3) 运行sql 语句4) 取回数据5) 将数据转换成对象很显然,当我们一遍又一遍的执行相同的查询时,上面1),2)两个步骤重复执行是在浪费时间。

linq to sql

linq to sql

1
ORM框架
大部分ORM框架将数据库的关系模型抽象成对象模型后,对 数据库的访问就只能通过对象模型以标准的对象访问方式 来进行象;而LINQ to SQL不同,它不仅允许以标准的 对象访问方式来访问对象模型,而且可以使用非常类似于 SQL语句的查询表达式来操作对象模型。
什么是LINQ to SQL
LINQ to SQL全称基于关系数据的.NET语言集成查询, 用于以对象形式管理关系数据,并提供了丰富的查询功能 。其建立于公共语言类型系统中的基于SQL的模式定义的 集成之上,当保持关系型模型表达能力和对底层存储的直 接查询评测的性能时,这个集成在关系型数据之上提供强 类型 LINQ to SQL是.NET3.0版本以上的一个组件,用于对 LINQ与SQL查询进行“语言翻译”。LINQ to SQL就 是LINQ聘请的翻译大师。这个翻译大师可以将LINQ查询 翻译成SQL查询。LINQ to SQL首先通过编程语言创建 对象模型,接着通过程序实时翻译成SQL查询,以映射到 关系数据库的数据模型,从而实现查询操作关系型数据。

LINQ to SQL LINQ to DataSet LINQ to Entities
LINQ的分类
LINQ to SQL

面向SQL Server 数据库。
LINQ to XML

面向XML 文档。
面向 数据集。
LINQ to DataSet

LINQ to Objects
3 DataContex对象
3.3 CreateDatabase方法 CreateDatabase方法用于在数据库服务器上根据实体 类映射信息或者XML映射文件创建一个数据库,其方法原 型定义如下。 void CreateDatabase() CreateDatabase方法的使用非常简单,没有参数,只 是根据映射信息创建一个包含若干物理表的数据库。 3.4 DatabaseExists方法 DatabaseExists方法用于判断DataContex对象使用的数据 库是否存在,其方法原型定义如下。 bool DatabaseExists() 此方法的使用非常简单,没有参数,只是简单地根据 DataContex的初始化数据库连接信息判断数据库是否存在 。如果存在就返回true,否则返回false。

LinQtoSQL用法详解

LinQtoSQL用法详解

LinQtoSQL⽤法详解LinQ是指集成化查询语⾔,通过映射将内的表名变为C#的类名,将列名作为属性名,将表的关系作为类的成员对象。

O--M--R O-Object对象R-Relation关系M-Mapping映射LinQ包括:LinQ to SQL,针对SQL的查询,它是⼀个带有可视化的操作界⾯的ORM⼯具。

LinQ to Object,⽤来实现对内存中集合对象的查询。

LinQ to DataSet,对强类型化或弱类型化的DataSet或独⽴的DataTable进⾏查询。

LinQ to Entity,对实体框架中EDM定义的实体集合进⾏查询。

(⼀):LinQ to SQL第⼀步:建⽴LinQ2SQL类添加⼀个新建项,选择LinQ to SQL,将⽤到的表拖进来。

第⼆步:实例化上下⽂对象,基本所有操作都是通过上下⽂对象来进⾏的。

MyDBDataContext context = new MyDBDataContext();第三步:操作⼀、增加数据:1.造⼀个要添加的数据对象:Info data = new Info();data.Code = "p211"; = "⽯头";data.Sex = false;data.Nation = "N001";data.Birthday = new DateTime(1990, 1, 2);2.在上下⽂中注册上⾯新造的对象。

.InsertOnSubmit(data);3.提交执⾏context.SubmitChanges();⼆、删除:1. 找出要删除的数据MyDBDataContext context = new MyDBDataContext();var q = .Where(p => p.Code == "p003");2. 删除注册if (q.Count() > 0){Info data = q.First();//注册context.Work.DeleteAllOnSubmit(data.Work);context.Family.DeleteAllOnSubmit(data.Family);.DeleteOnSubmit(data);}3. 提交执⾏context.SubmitChanges();三、修改:1. 找出要修改的数据MyDBDataContext context = new MyDBDataContext();var q = .Where(p=>p.Code == "p001");2. 改,不⽤注册if (q.Count() > 0){Info data = q.First();//改 = "胡⽣";data.Nation = "n001";data.Sex = false;}3. 提交执⾏context.SubmitChanges();四、查询:1.查所有MyDBDataContext context = new MyDBDataContext();//所有⼈员var q = ;//var q = from p in select p;//显⽰foreach(Info data in q){//data.Nation1:当前⼈员对应的民族对象。

Linq to sql 更新数据库

Linq to sql 更新数据库

使用LINQ to SQL建模Northwind数据库在这之前一起学过LINQ to SQL设计器的使用,下面就使用如下的数据模型:当使用LINQ to SQL设计器设计以上定义的五个类(Product,Category,Customer,Order和OrderDetail)的时候,每个类中的属性都映射了相应数据库中表的列,每个类的实例则代表了数据库表中的一条记录。

另外,当定义数据模型时,LINQ to SQL设计器同样会创建一个自定义DataContext类,来作为数据库查询和应用更新/变化的主要渠道。

以上数据模型中定义的DataContext类命名为“NorthwindDataContext”。

该类中包含了代表每个建模数据库表的属性。

使用LINQ语法表达式可以十分简单的使用NorthwindDataContext类来查询和检索数据库中的数据。

LINQ to SQL会在运行时自动的转换LINQ表达式到适当的SQL代码来执行。

例如,编写以下LINQ表达式来根据Product Name检索单个Product对象:还可以使用LINQ表达式来检索所有不存在于Order Details中的,并且UnitPrice大于100的所以Product:变化跟踪和DataContext.SubmitChanges()当执行查询和检索像Product实例这样的对象时,LINQ to SQL会自动保持对这些对象任何变化或更新的跟踪。

我们可以进行任意次数的查询,以及使用LINQ to SQL的DataContext类作出更新,而这些变化都会被全部跟踪。

注意:LINQ to SQL的变化跟踪发生于调用者端——而不是在数据库中。

这就意味着使用跟踪不会销耗任何数据库资源,也不需要在数据库中改变/安装任何组件模块。

当对从LINQ to SQL中检索的对象作出更改之后,我们可以选择调用DataContext上的SubmitChange()方法来应用变化返回到数据库。

LINQ to SQL

LINQ to SQL

LINQ查询的目的是从指定的数据源中查询满足符合特定条件的数据元素,并且通过根据需要对这些查询的元素进行排序、连接等操作。

所以LINQ查询包含如下几个主要元素:•数据源:数据源表示LINQ查询将从哪里查找数据,它通常是一个或多个数据集,每个数据集包含一系列的元素。

数据集是一个类型为IEnumerable<T>或IQueryable<T>的对象,可以对它进行枚举,遍历每一个元素。

此外,它的元素可以是任何数据类型,所以可以表示任何数据的集合。

•目标数据:数据源中的元素并不定是查询所需要的结果。

目标数据用来指定查询的具体想要的是什么数据。

在LINQ中,它定义了查询结果数据集中元素的具体类型。

•筛选条件:筛选条件定义了对数据源中元素的过滤条件。

只有满足条件的元素才作为查询结果返回。

筛选条件可以是简单的逻辑表达式表示,也可以用具有复杂逻辑的函数来表示。

•附加操作:附加操作表示一些其它的具体操作。

比如,对查询结果进行分组等。

其中,数据源和目标数据库是LINQ查询的必备元素,筛选条件和附加操作是可选元素。

2.用from子句指定数据源每个LINQ查询都以from子句开始,from子句包括以下两个功能。

•指定查询将采用数据源。

•定义一个本地变量,表示数据源中单个元素。

单个from子句的编写格式如下所示。

其中dataSource表示数据源,localVar 表示单个元素。

from localVar in dataSource3.用select子句指定目标数据select子句指定在执行查询时产生结果的数据集中元素的类型,它的格式如下所示:select element4.用where子句指定筛选条件在LINQ中,用where子句指定查询的过滤条件,它的格式如下:where expression其中,express是一个逻辑表达式,返回布尔值“真”或“假”在LINQ查询中,还可以使用多个并列的where子句来进行多个条件过滤。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

从数据库中删除一个对象
//从表 从表 var stu = from s in db.stuInfo 增删改方式 where s.stuClass == 3 select s; 删除主从表条: //主表 主表 var classic = db.classic.First(c => c.classID == 3); //先删除从表数据 先删除从表数据 foreach (var s in stu) { //先删除学生成绩表对应学号的学生 先删除学生成绩表对应学号的学生 var score = (from sc in db.stuMarks where先删除从表数据,再删除主表数据 sc.stuNo == s.stuNo select sc).First(); db.stuMarks.DeleteOnSubmit(score); db.stuInfo.DeleteOnSubmit(s); } //在删除主表 在删除主表 db.classic.DeleteOnSubmit(classic); //提交 提交 db.SubmitChanges();
增删改方式
删除数据
– –
一个对象 主从关系
删除方式 删除一个对象:
//一条记录 一条记录 var stu = db.stuInfo.First(s => s.stuNo == "s25310"); db.stuInfo.DeleteOnSubmit(stu); db.SubmitChanges();
注册输出参数
无参直接调用 输入参数调用 输入/输出参数
总结 • 连接查询的几种方式
一对多、多对多、双向连接、 一对多、多对多、双向连接、左连接

新增数据的执行方法
InsertOnSubmit(对象 对象) 对象

Linq调用存储过程怎么处理输出参数
使用ref注册输出参数 并用查询示例
多对多关系(Many to Many):
var q = from c in db.Customers join o in db.Orders on c.CustomerID equals o.CustomerID into orders select new { c.ContactName, OrderCount = orders.Count() };
增删改方式
更新数据
– – –
一个对象 多条记录 多表查询更新
更新方式 更新一个对象:
var stu = db.stuInfo.First(s => s.stuNo == "s25301"); stu.stuName = "陈兰 陈兰"; 陈兰 db.SubmitChanges();
从数据库中更新一个对象
小结 • 连接查询
– – – – 一对多(1 to Many):表关系一对多关系 多对多(Many to Many):表关系多对多关系 双向连接(Two way join):显式联接两个表并从 这两个表投影出结果 左外部连接(Left Outer Join):获取左外部表联接 分组查询(Group By/Having操作符):分组数据, 为我们查找数据缩小范围。 子查询(Contains):连接不同的集合,不会自动 过滤相同项
– 分组查询,子查询
高级查询
连接查询方式
– –
一对多 多对多
连接查询示例 一对多关系(1 to Many):
var q =
from c in db.Customers from o in c.Orders where c.City == "London" select o; 语句描述:Customers与Orders是一对多关系。 即Orders在Customers类中以EntitySet形式出现。 所以第二个from是从c.Orders而不是db.Orders里 进行筛选。这个例子在From子句中使用外键导航 选择伦敦客户的所有订单。
建立程序,使用linq实现下面题目 数据库使用上章作业数据库 通过linq实现 通过 查询stuInfo表、classic表显示效果如下图 实现 删除功能 实现删除按钮功能 通过连接查询
显示班级名称
第三章 第三章
LINQ TO SQL高级查询 高级查询
回顾 • LINQ主要负责数据库的查询的是哪部分
LINQ to

LINQ查询存在的两种形式
查询方法方式、查询语句方式

举例常用的聚合类查询方法
Count、Max/Min、Average
本章任务 • 编写 LINQ程序,通过实现下图
从数据库中查询要更新的对象 进行更新
小结 • 增删改提交方法
– 新增数据提交使用 db.stuInfo.InsertOnSubmit(stu); db.SubmitChanges(); – 删除数据使用 db.stuInfo.DeleteOnSubmit(stu); db.SubmitChanges(); – 更新数据使用 db.SubmitChanges();
向数据库中添加一个对象
新增方式 //一对多关系 一对多关系 var c = new Model.classic 新增1对多对象: { className="T120" }; var s = new Model.stuInfo { stuNo = "s25310", stuName = "王军 王军", 王军 stuAge = 24, stuSex = "男", 男 classic 一对多关系一次插入多个对象 = c //对应添加的班级对象 对应添加的班级对象 }; var sc = new Model.stuMarks { ExamNo = "S271817", LabExam=70, writtenExam=80 stuInfo = s //对应添加的学生对象 对应添加的学生对象 }; db.classic.InsertOnSubmit(c); db.SubmitChanges();
从数据库中更新多个对象
更新方式 多表查询更新:
var sql = from sc in db.stuMarks where sc.stuInfo.stuName == "陈兰 陈兰" 陈兰 select sc; foreach (var s in sql) { s.writtenExam += 5; } db.SubmitChanges();
高级查询方式示例 子查询(Contains):
var q = ( from o in db.Orders where ( new string[] { "AROUT", "BOLID", "FISSA" }) .Contains(o.CustomerID) select o).ToList();
语句描述:查找"AROUT", "BOLID" 和 "FISSA" 这三个客户的订单。先定义了一个数组,在LINQ to SQL中使用Contains,数组中包含了所有的 CustomerID,即返回结果中,所有的CustomerID 都在这个集合内。也就是in。
更新方式 更新多条记录:
var sql = from s in db.stuInfo where s.stuClass == 1 select s; foreach (var s in sql) { s.stuAge += 1; //年龄加一岁 年龄加一岁 } db.SubmitChanges();
– –
分组查询 子查询
高级查询方式示例 分组查询(Group By操作符):
var q = from p in db.Products group p by p.CategoryID into g select g;
说明:from p in db.Products 表示从表中将产品 对象取出来。group p by p.CategoryID into g表示 对p按CategoryID字段归类。其结果命名为g,一 旦重新命名,p的作用域就结束了,所以,最后 select时,只能select g。
多对多关系一般会涉及三 个表(如果有一个表是自关 联的,那有可能只有2个表)。 这一句语句涉及 Employees, EmployeeTerritories, Territories三个表。它们的 关系是1:M:1。 Employees和Territories没 有很明确的关系。
高级查询
高级查询方式
通过linq实现 实现 通过 删除功能 通过连接查询 显示班级名称
本章目标
– – – 学习理解 LINQ to SQL 高级查询 学习LINQ to SQL句增删改语句 学习LINQ to SQL使用存储过程
高级查询方式 高级查询方式 • 连接查询
– 一对多,多对多,双向连接,左外部连接

高级查询

高级查询
– –
增删改方式 • • • 增加数据
– – – 一个对象,一对多
删除数据
一个对象,主从关系
更新数据
一个对象,多条记录,多表更新
增删改方式
新增数据
– –
一个对象 一对多
新增方式 新增一个对象:
var stu = new Model.stuInfo { stuNo="s25308", stuName="足下 足下", 足下 stuAge=20, stuSex="男", 男 stuClass=2 }; //保存到对象集合 保存到对象集合 db.stuInfo.InsertOnSubmit(stu); db.SubmitChanges();
相关文档
最新文档