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

     

    Suppose you have a tblRoom and tblUserInfo. Now, you need to select all the rooms regardless of whether the room has user information or not. This calls for a LEFT JOIN which will select everything from the LEFT side (the room side) regardless of the join on the right side. Here is the example.

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

    现在你需要检索出所有房间的信息,而不管这个房间是否有人居住。这就需要进行LEFT JOIN(左外连接),左外连接会检索出LEFT JOIN左边表中的所有行,而不管右边的表是否有匹配项。下面是一个例子:  

    var list = from r in dc.tblRooms
                              join ui in dc.tblUserInfos
                              on r.UserName equals ui.UserNameinto 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
                               };
    View Code

    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  
    View Code

    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 + '	' + list[i].jname + '	' + list[i].cname); //字段为null不报异常  
            //Console.WriteLine(list[i].u1.name+'	'+list[i].x1.jname+'	'+list[i].v1.cname+"
    "); //对象x1 v1 有可能为null 抛异常  
        }  
        Console.ReadLine();
    View Code

    3个表 LEFT JOIN 例子:

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

  • 相关阅读:
    01-移动端 REM 适配(postcss-pxtorem,lib-flexible的使用)
    19-webpack性能优化集锦
    10-map/WeakMap/WeakSet的使用场景
    03-web worker vue项目实战
    ELFhash
    哈希查找
    Logger之Logger.getLogger(CLass)使用(转载)
    mybatis中多对一查询
    IDEA中无法打开查看log文件解决方案
    Self-Supervised Scene De-occlusion(转载)
  • 原文地址:https://www.cnblogs.com/weixing/p/4447927.html
Copyright © 2011-2022 走看看