如何在LINQ中使用左连接获取所有数据

时间:2018-11-24 10:23:36

标签: linq

当我尝试将两个列表作为左连接加入时,它将引发异常字符串null异常     

 enter code here
                   public void LeftJoinPerson()
                    {
                       lstPerson = new List() { 
                                   new Person(){ id = 1, name = "A" },
                                   new Person(){id = 2,name = "B"},
                                   new Person(){id=3,name="C"},
                                   new Person(){id=4,name="D"}
                   };

        lstPersonDetail = new List<PersonDetals>() { 
                             new PersonDetals() { pid = 1, mobile = 
                             9685745285, address = "Address1" },

                             new PersonDetals() { pid = 2, mobile = 
                             9685745285, address = "Address1" },

                             new PersonDetals() { pid = 3, mobile = 
                             9685745285, address = "Address1" } 
        };

        var dataLeftJoin = (from a in lstPerson
                               join b in lstPersonDetail on a.id equals 
                               b.pid into c
                               from d in c.DefaultIfEmpty()
                               select new {
                               a.id,
                               a.name,
                               d.mobile,
                               d.address,
                               d.pid
                               }).ToList();
    }

2 个答案:

答案 0 :(得分:2)

在“左联接”中,右表可能没有数据,因此在创建新的选择类型时需要检查是否为空。

尝试以下方法:

var dataLeftJoin = (from a in lstPerson
                               join b in lstPersonDetail on a.id equals 
                               b.pid into c
                               from d in c.DefaultIfEmpty()
                               select new {
                               a.id,
                               a.name,
                               mobile = d == null ? 0 : d.mobile,
                               address = d == null ? "" : d.address,
                               pid = d == null ? 0 : d.pid
                               }).ToList();

答案 1 :(得分:0)

<pre>
var dataLeftJoin = (from a in lstPerson
                           join b in lstPersonDetail on a.id equals 
                           b.pid into c
                           from d in c.DefaultIfEmpty()
                           select new {
                           a.id,
                           a.name,
                           mobile = d == null ? 0 : d.mobile,
                           address= d == null ? null : d.address,
                           pid= d == null ? 0 : d.pid
                           }).ToList();