您的位置:首页 > 数据库

Linq to Sql ------------------------复习(二)

2014-03-22 12:09 393 查看
类中的代码

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 ------------------------复习(一)是相同的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: