LINQ C# Join with Left-Join 结果

LINQ C# Join with Left-Join result

我正在尝试对另一个左连接的结果进行左连接,但在某些情况下 returns 我出现了空引用错误(很明显),有什么方法可以不使用在 select?

之后 foreach
var result = from f in foo
             from ex in exp.Where(w => w.id == f.idFoo).DefaultIfEmpty()
             from te in tes.Where(w => w.id == ex.anyID).DefaultIfEmpty()
select new
{
    var1 = f.something,
    ...
    var2 = te.anything
};

像这样:

var2 = te != null ? te.anything : null

发生这种情况是因为 DefaultIfEmpty 正在返回一个包含单个 null 元素的序列。那么您正在尝试访问 null 元素的属性。

使用 the overload of DefaultIfEmpty to return a non-null default value(适当的数据类型):

var result = from f in foo
             from ex in exp.Where(w => w.id == f.idFoo)
                           .DefaultIfEmpty(new Exp())
             from te in tes.Where(w => w.id == ex.anyID)
                           .DefaultIfEmpty(new Tes())
select new
{
    var1 = f.something,
    ...
    var2 = te.anything
};

这样您就不会尝试访问 null 元素的属性。

根据评论进行编辑。在查询中,出现 null 元素的地方是当 Where 导致零匹配时。例如,在第三个 from 中,ex 变量可能是一个 null 元素的序列,而在 select 中,te 也可能是这样一个序列。在这两种情况下,访问 属性 都会抛出异常。

或者,您可以在每次 访问属性 时进行空测试。那会很快变得冗长。