简体   繁体   中英

Self Join in Linq with null values c#

How can i get the rows that have null in the column used for self join ? My code is :

IEnumerable<ListClassView> list = from l in lists join lp in lists on 
l.ParentListId equals lp.Id 
select new ListClassView()
{
    Id = l.Id,
    ListName = l.ListName,
    Description = l.Description,
    ParentName = lp.ListName,
    IsActive = l.IsActive
};

I am unable to fetch rows where ParentListId=null . Is there a way where i can get all rows ?

Alternative syntax:

var list = lists.GroupJoin(
  lists,
  l => l.ParentListId,
  lp => lp.Id,
  (l, lp) => new ListClassView
            { 
               Id = l.Id, 
               ListName = l.ListName, 
               Description = l.Description,
               ParentName = lp.FirstOrDefault() == null ? null : lp.First().ListName,
               IsActive = l.IsActive
            });

I found the solution from here by applying a left join :

IEnumerable<ListClassView> list = from l in lists join lp in lists on 
l.ParentListId equals lp.Id into lpp
from p in lpp.DefaultIfEmpty()
select new ListClassView()
{
    Id = l.Id,
    ListName = l.ListName,
    Description = l.Description,
    ParentName = p.ListName,
    IsActive = l.IsActive
};

Now, It gets all rows including those with ParentListId = null

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM