Linq Left Join;linq左连接 (转载)

来源 https://www.cnblogs.com/xinjian/archive/2010/11/17/1879959.html

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

 

复制代码
复制代码
use Test
Create 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 s
left join Book as b on s.id=b.studentid

--右连接
select s.name,b.name from student as s
right 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

};
复制代码
复制代码

 

 三表左连接

 匿名类

复制代码
var list = (  
    from u in dc.userinfos  
        join j in dc.jobs on u.job equals j.jid into j_join  
    from x in j_join.DefaultIfEmpty()  
        join c in dc.cities on u.city equals c.cid into c_join  
    from v in c_join.DefaultIfEmpty()  
    select new  
    {  
        id = u.id,  
        name = u.name,  
        jname = x.jname,  
        cname = v.cname,  
        /*u1=u,x1=x,v1=v*/  
        //不要用对象的方式 因为对象可能为null那么对象.属性就会抛异常  
    }  
    ).ToList();  
      
    for (var i = 0; i < list.Count(); i++)  
    {  
        Console.WriteLine(list[i].name + '\t' + list[i].jname + '\t' + list[i].cname); //字段为null不报异常  
        //Console.WriteLine(list[i].u1.name+'\t'+list[i].x1.jname+'\t'+list[i].v1.cname+"\r\n"); //对象x1 v1 有可能为null 抛异常  
    }  
    Console.ReadLine();
View Code
复制代码

 

模型类

 

linq join 左连接 leftjoin 多个on条件 where 条件

 
var haveChange = from newScore in newScoreList
                  join oldScore in oldScoreList
                  on
                     new{newScore.ExamId,newScore.StudentId,newScore.Subject,newScore.ClassId} equals
                     new{oldScore.ExamId,oldScore.StudentId,oldScore.Subject,oldScore.ClassId}
                  where newScore.Score != oldScore.Score
                  select newScore;

 

复制代码
复制代码
var query= from cc in COPTC
           join cd in COPTD
           on new {cc.TC001,cc.TC002} equals new{ cd.TD001,cd.TD002} 
           into m
           from n in m.DefaultIfEmpty()
           join ma in MOCTA
           on new{cd.TD001, cd.TD002,cd.TD003 } equals new{ ma.TA026,ma.TA027,ma.TA028}
            
           where new char[]{'Y','y'}.Contains(ma.TA013) 
              && new char[]{'Y','y'}.Contains(cc.TC027)
              && Convert.ToDateTime(ma.TA003) > Convert.ToDateTime("2010-07-20")
              && Convert.ToDateTime(ma.TA003) < Convert.ToDateTime("2010-12-31")
           select new 
           {
              cc,
              cd
           };
复制代码
复制代码
 
分类: 转载
标签: Linq
 

 

参考资料:

https://www.cnblogs.com/weixing/p/4447927.html

https://www.cnblogs.com/joeylee/p/3711654.html

http://developer.51cto.com/art/200909/152189.htm

http://hi.baidu.com/thinsoft/blog/item/83fb1e9089cc7186a877a4b1.html

http://apps.hi.baidu.com/share/detail/12540006

http://www.winu.cn/space-14160-do-blog-id-25172.html

posted @   hao_1234_1234  阅读(167)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示