У меня есть 2 списка, для которых я выполняю внешнее левое соединение, как показано ниже:
class Item
{
public int Id { get; set; }
}
class AvailableItem
{
public bool IsAvailable { get; set; }
public Item Item { get; set; }
}
var leftList = new List<Item>(); //Then populate
var rightList = new List<Item>(): //Then populate too
var list = (from l in leftList
join r in rightList on l.Id equals r.Id into gp
from sp in gp.DefaultIfEmpty()
select new AvailableItem
{
IsAvailable = sp != null,
Item = l
}).ToList();
Но я получаю следующее исключение:
'Значениене может быть нулевым.Имя параметра: inner '
Исключение выдается только тогда, когда rightList
не пусто.Если он пуст, list
будет содержать все элементы в leftList
.
Я также попытался изменить строку:
join r in rightlist on l.Id equals r.Id into gp
на:
join r in rightlist on l equals r into gp
, так как это одни и те же элементы в обоих списках.Тем не менее, я бы предпочел использовать свойство Id
на всякий случай.
Но запрос все равно вызывает то же исключение.
Что я делаю не так?