Linq to Sql ------------------------复习(二)
2014-03-22 12:09
393 查看
类中的代码
View Code
数据库中的代码和Linq to Sql ------------------------复习(一)是相同的
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace LinqTest { class LinqDemo_2 { static void Main(string[] args) { StudentDBDataContext db = new StudentDBDataContext("server=.;uid=sa;pwd=123456;database=studentdb"); #region Any/All/Contains操作符 //返回没有参加考试的学生 //Console.WriteLine("No\t"+"Name\t"+"Age"); //foreach (var item in (from stu in db.stuInfo select stu)) //{ // Console.WriteLine(item.stuNo + "\t" + item.stuName + "\t" + item.stuAge); //} //Console.WriteLine(); //var sql1 = from stu in db.stuInfo where !stu.stuMarks.Any() select stu; //Console.WriteLine(sql1); //foreach (var item in sql1) //{ // Console.WriteLine(item.stuNo+"\t"+item.stuName+"\t"+item.stuAge); //} //Any:用于判断集合中是否有元素满足某一条件 //var sql = from s in db.stuInfo // where !s.stuMarks.Any() // select s; //foreach (var s in sql) //{ // Console.WriteLine("学生姓名:{0}", s.stuName); //} //ALL:用于判断集合中所有元素是否都满足某一条件 Console.WriteLine("\n"); var sql2 = from stu in db.stuInfo where stu.stuMarks.All(sm => sm.stuNo != stu.stuNo) select stu; Console.WriteLine(sql2); foreach (var item in sql2) { Console.WriteLine(item.stuNo + "\t" + item.stuName + "\t" + item.stuAge); } Console.WriteLine(); Console.WriteLine("no"+"\tLabExam"+"\tWrittenExam"); foreach (var item in (from sm in db.stuMarks select sm)) { Console.WriteLine(item.stuNo+"\t"+item.LabExam+"\t"+item.writtenExam); } //var sql = from s in db.stuInfo // where s.stuMarks.All(sc => sc.stuNo != s.stuNo) // select s; //foreach (var s in sql) //{ // Console.WriteLine("学生姓名:{0}", s.stuName); //} // Contains子查询形式 Console.WriteLine("Contains"); var sql3 = from stu in db.stuInfo where !(from sm in db.stuMarks select sm.stuNo).Contains(stu.stuNo) select stu; Console.WriteLine("No\t" + "Name\t" + "Age"); foreach (var item in sql3) { Console.WriteLine(item.stuNo + "\t" + item.stuName + "\t" + item.stuAge); } #endregion #region SelectMany 连接查询 //SelectMany类型:我们在写查询语句时,如果被翻译成SelectMany需要满足2个条件。1:查询语句中没有join和into,2:必须出现EntitySet。在我们表关系中有一对一关系,一对多关系,多对多关系等 //第一种形式:常规形式 var sql4 = from stu in db.stuInfo from sm in db.stuMarks where stu.stuNo==sm.stuNo select new { 姓名 = stu.stuName, 笔试 = sm.writtenExam, 机试 = sm.LabExam }; Console.WriteLine("姓名\t"+"笔试\t"+"机试"); foreach (var item in sql4) { Console.WriteLine(item.姓名+"\t"+item.笔试+"\t"+item.机试); } //第二种形式:SelectMany查询形式 Console.WriteLine(); var sql5 = from stu in db.stuInfo from sm in stu.stuMarks select new { 姓名 = stu.stuName, 笔试 = sm.writtenExam, 机试 = sm.LabExam }; Console.WriteLine("姓名\t" + "笔试\t" + "机试"); foreach (var item in sql5) { Console.WriteLine(item.姓名 + "\t" + item.笔试 + "\t" + item.机试); } //var sql = from s in db.stuInfo // from sc in s.stuMarks // select new // { // 姓名 = s.stuName, // 笔试 = sc.writtenExam, // 机试 = sc.LabExam // }; //Console.WriteLine(sql); //第三种:简化形式 Console.WriteLine(); var sql6 = from sm in db.stuMarks select new { 姓名 = sm.stuInfo.stuName, 笔试 = sm.writtenExam, 机试 = sm.LabExam, 班级= sm.stuInfo.classic.className }; Console.WriteLine("姓名\t" + "笔试\t" + "机试"); foreach (var item in sql6) { Console.WriteLine(item.姓名 + "\t" + item.笔试 + "\t" + item.机试+"\t"+item.班级); } //var sql = from s in db.stuInfo // where s.classic.className == "T102" // select s; //Console.WriteLine(sql); //foreach (var s in sql) //{ // Console.WriteLine("学生姓名:{0},所在班级:{1}", s.stuName, s.classic.className); //} //第四种:多对多的查询形式 //var sql = from s in db.stuInfo // from sc in s.stuMarks // select new // { // s.stuName, // s.classic.className, // sc.writtenExam, // sc.LabExam // }; //Console.WriteLine(sql); //foreach (var s in sql) //{ // Console.WriteLine("学生姓名:{0},所在班级:{1},笔试:{2},机试:{3}", s.stuName, s.className, s.writtenExam, s.LabExam); //} Console.WriteLine("SelectMany"); var sql7 = db.stuInfo.SelectMany(s => s.stuMarks); Console.WriteLine(sql7); foreach (var item in sql7) { Console.WriteLine(item.stuNo+"\t"+item.LabExam+"\t"+item.writtenExam+"\t"); } #endregion Console.WriteLine("aaaaaa"); //var sql8 = from stu in db.stuInfo // join c in db.classic // on stu.classID equals c.classID // into s // from ss in s.DefaultIfEmpty() // select new // { // stu.stuNo, // stu.stuName, // stu.classID, // count = s.Count(), // ss.className // }; //var sql8 = from c in db.classic // join s in db.stuInfo // on c.classID equals s.classID // into cs // from stu in cs.DefaultIfEmpty() // select new // { // stu.stuNo, // stu.stuName, // c.classID, // c.className // }; //foreach (var item in sql8) //{ // Console.WriteLine(item.stuNo + "\t" + item.stuName + "\t" + item.classID + "\t" + item.className); //} #region GroupJoin连接查询 //像上面所说的,没有join和into,被翻译成SelectMany,同时有join和into时,那么就被翻译为GroupJoin, //如果在连接查询中,需要使用聚合函数,可以采用GroupJoin进行分组连接查询 //只有join,没有into形式,类似于inner..join..on //var sql = from c in db.classic // join s in db.stuInfo // on c.classID equals s.classID //注意采用equals替换== // select new // { // c.className, // s.stuName // }; //Console.WriteLine(sql); //左外部联接(Left Outer Join): //var sql = from s in db.stuInfo // join sc in db.stuMarks // on s.stuNo equals sc.stuNo // into ss //many端重新命名 // from o in ss.DefaultIfEmpty() //左连接,DefaultIfEmpty再次遍历右边,没有的学生默认为null // select new // { // s.stuName, // writtenExam = o.writtenExam==null?0:o.writtenExam, // labExam = o.LabExam==null?0:o.LabExam // }; //Console.WriteLine(sql); //foreach (var s in sql) //{ // Console.WriteLine("姓名:{0},笔试:{1},机试:{2}",s.stuName,s.writtenExam,s.labExam); //} //三向连接 //var sql = from c in db.classic // join s in db.stuInfo // on c.classID equals s.classID // join sc in db.stuMarks // on s.stuNo equals sc.stuNo // select new // { // c.className, // s.stuName, // sc.writtenExam, // sc.LabExam // }; //Console.WriteLine(sql); //foreach (var s in sql) //{ // Console.WriteLine("学生姓名:{0},所在班级:{1},笔试:{2},机试:{3}", s.className, s.stuName, s.writtenExam, s.LabExam); //} //双向联接(Two way join): //var sql = from c in db.classic // join s in db.stuInfo // on c.classID equals s.classID // into stu // select new // { // className = c.className, // count = stu.Count() // }; //Console.WriteLine(sql); //foreach (var s in sql) //{ // Console.WriteLine("班级:{0},人数:{1}", s.className, s.count); //} #endregion } } }
View Code
数据库中的代码和Linq to Sql ------------------------复习(一)是相同的
相关文章推荐
- 安装redis和phpredis模块
- ios数据库
- 分区表--SQLServer创建分区表
- PL/SQL处理例外3(PL/SQL编译警告)
- sql for xml path用法
- sql for xml path用法
- 两个数据库设计实例
- PL/SQL_处理例外2(非预定义异常、自定义异常)
- Oracle 删除用户和表空间
- php中memcache与memcached的区别 【收藏】
- PL/SQL_处理例外1(预定义例外)
- Oracle,第三周
- 解决MongoDB导入csv格式含中文的文档编码报错
- Redis安装以及主从实现
- plsql连接oracle数据库
- JDBC通过SSH Tunnel连接MySQL数据库
- postgresql修改插入数据id的起始值
- ORACLE 触发器
- MySQL 部门 员工数量查询
- Oracle 10g如何对用户姓名,按首字母排序、查询