Как я могу получить строки с нулевым значением в столбце, используемом для самостоятельного присоединения? Мой код:

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
};

Я не могу получить строки, где ParentListId=null. Есть ли способ получить все строки?

0
isumit 4 Июл 2014 в 22:34
1
 – 
Richard Deeming
4 Июл 2014 в 23:00
Да :) Я только что нашел способ сделать это с помощью левого соединения в linq. Спасибо
 – 
isumit
4 Июл 2014 в 23:04

2 ответа

Лучший ответ

Я нашел решение отсюда, применение левого соединения:

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
};

Теперь он получает все строки, включая строки с ParentListId = null

0
isumit 4 Июл 2014 в 23:03

Альтернативный синтаксис:

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
            });
1
mdisibio 4 Июл 2014 в 23:14