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
也可能是这样一个序列。在这两种情况下,访问 属性 都会抛出异常。
或者,您可以在每次 访问属性 时进行空测试。那会很快变得冗长。
我正在尝试对另一个左连接的结果进行左连接,但在某些情况下 returns 我出现了空引用错误(很明显),有什么方法可以不使用在 select?
之后 foreachvar 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
也可能是这样一个序列。在这两种情况下,访问 属性 都会抛出异常。
或者,您可以在每次 访问属性 时进行空测试。那会很快变得冗长。