Linq 左连接查询和右连接查询

来源:互联网 发布:谷嫂淘宝 蓝盾 编辑:程序博客网 时间:2024/05/16 06:47

本文转载自:https://www.cnblogs.com/xinjian/archive/2010/11/17/1879959.html

 准备一些测试数据,如下:

use TestCreate table Student(ID int identity(1,1) primary key,[Name] nvarchar(50) not null)Create Table Book(ID int identity(1,1) primary key,[Name] nvarchar(50)not null,StudentID int not null)insert into Student values('张三')insert into Student values('李四')insert into Student values('王五')select * from student--张三借的书insert into Book values('红楼',1)insert into Book values('大话红楼',1)--李四借的书insert into Book values('三国',2)--王五没借书--一本错误的记录insert into Book values('错误时怎样练成的',111)--左连接select s.name,b.name from student as sleft join Book as b on s.id=b.studentid--右连接select s.name,b.name from student as sright join Book as b on s.id=b.studentid
要用Linq实现左连接,写法如下

DataClasses1DataContext db = new DataClasses1DataContext();            var leftJoinSql = from student in db.Student                              join book in db.Book on student.ID equals book.StudentID into temp                              from tt in temp.DefaultIfEmpty()                              select new                              {                                   sname= student.Name,                                   bname = tt==null?"":tt.Name//这里主要第二个集合有可能为空。需要判断                              };
用Linq实现右连接,写法如下

DataClasses1DataContext db=new DataClasses1DataContext();            var rightJoinSql = from book in db.Book                               join stu in db.Student on book.StudentID equals stu.ID into joinTemp                               from tmp in joinTemp.DefaultIfEmpty()                               select new {                                sname=tmp==null?"":tmp.Name,                               bname=book.Name                               };




阅读全文
0 0