zoukankan      html  css  js  c++  java
  • Linq 左连接 left join

    简介

    假如你有两张表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 实现多字段关联查询 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 
    {
    };

  • 相关阅读:
    PAT A1094 The Largest Generation (25 分)——树的bfs遍历
    PAT A1055 The World's Richest (25 分)——排序
    PAT A1052 Linked List Sorting (25 分)——链表,排序
    PAT A1076 Forwards on Weibo (30 分)——图的bfs
    辅导员
    辅导员面试
    C程序设计
    Excel VBA 基本概念
    Excel函数
    导入excel表的数据到数据库ssh
  • 原文地址:https://www.cnblogs.com/grj001/p/12224883.html
Copyright © 2011-2022 走看看