首页 > 解决方案 > 使用 LINQ throws 加入两个列表

问题描述

我有 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属性以防万一。

但是查询仍然抛出相同的异常。

我究竟做错了什么?

标签: c#listlinqjoin

解决方案


推荐阅读