Linq 左连接 left join

摘要:
简介假设您有两张表tblRoom和tblUserInfo。这需要LEFTJOIN。左外部联接将检索LEFTJOIN左表中的所有行,而不管右表是否匹配。
简介

假如你有两张表tblRoom(房 间表)和tblUserInfo(住户表)。

现在你需要检索出所有房间的信息,而不管这个房间是否有人居住。

这就需要进行LEFT JOIN(左外连接),左外连接会检索出LEFT JOIN左边表中的所有行,而不管右边的表是否有匹配项。

example
var list = from r in dc.tblRooms
           join ui in dc.tblUserInfos
           on r.UserName equals ui.UserName into userrooms
           from ur in userrooms.DefaultIfEmpty()
           select new {
                 FirstName = (ur.FirstName == null) ? "N/A" : ur.FirstName,
                 LastName = (ur.LastName == null) ? "N/A" : ur.LastName,
                 RoomName = r.Name
           };

he anonymous type replaces the "null" FirstName and LastName with "N/A" (not available).

使用"N/A"(不可得)代替FirstName 和 LastName 值为"null"的情况。

另附:Linq实现多个表 LEFT JOIN 如下

目标SQL语句(多表 LEFT JOIN 查询)

SELECT id, name, jname, cname   
        FROM userinfo u   
        LEFT JOIN job j on u.job = j.jid   
        LEFT JOIN city c on u.city = c.cid  

Linq To Sql 实现三个表 LEFT JOIN 如下:

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();

3个表 LEFT JOIN 例子:

Emp(员工表)、Dept(部门表)、KqEmp(人员考勤信息表)

Linq 左连接 left join第1张

LINQ 实现多字段关联查询 C#

var query = from main in _userDeviceChannelRole.Table
join deviceChannelInfo in _deviceChannelRepository.Table on new { main.DeviceId, main.ChannelNumber } equals new { deviceChannelInfo.DeviceId, deviceChannelInfo.ChannelNumber }
select new
{
};

免责声明:文章转载自《Linq 左连接 left join》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇编写程序——代码的排版机器学习笔记19-----LDA主题模型(重点理解LDA的建模过程)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

VB.NET中LINQ TO List泛型查询语句(分组,聚合函数)

Public Class LinqToList 'LINQ在C#中使用比较方便,但是在VB中使用比较麻烦,复杂,和C#用法并不太一样 Dim listNew As List(Of Product) = New List(Of Product) '新商品 Dim listOld As List(Of Product) = New L...

LinQ 多表查询

编辑器加载中... 1. oneTT有字段AA BB CC 2. twoTT有字段EE FF BB 两个表连接查询, List<MulTable> mul = (from a in _db.oneTTT join b in _db.twoTTT on...

并发编程概述--C#并发编程经典实例

优秀软件的一个关键特征就是具有并发性。过去的几十年,我们可以进行并发编程,但是难度很大。以前,并发性软件的编写、调试和维护都很难,这导致很多开发人员为图省事放弃了并发编程。新版.NET 中的程序库和语言特征,已经让并发编程变得简单多了。随着Visual Studio 2012 的发布,微软明显降低了并发编程的门槛。以前只有专家才能做并发编程,而今天,每一个...

C# LINQ学习笔记二:LINQ标准查询操作概述

本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5801249.html,记录一下学习过程以备后续查用。 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法,大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T>接口 或 IQueryable<T&g...

LINQ中的Lambda表达式

Lambda Expressions in LINQ 在第12章,我提到可以用lambda表达式定义内联的委托定义。在如下表达式中: customer => customer.FirstName == "Donna" 左边的操作数,customer,是输入参数。右边的操作数是lambda表达式,检查客户的名字属性是否等于"Donna"。因此,对于给定...

LINQ to Entities 不识别方法“System.String ToString()”,因此该方法无法转换为存储表达式。

var data = DataSource.Skip(iDisplayStart).Take(iDisplayLength).Select(o => new{ MatNR =o.MatNR, MatDB =o.MatDB, CreatedOn=o.Creat...