当前位置:
文档之家› 第三章LINQ TO SQL高级查询
第三章LINQ TO SQL高级查询
从数据库中删除一个对象
//从表 从表 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();