Соединение двух списков с помощью бросков LINQ - PullRequest
0 голосов
/ 14 октября 2018

У меня есть 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 на всякий случай.

Но запрос все равно вызывает то же исключение.

Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...