我有这个GroupJoin:
var groupjoin = cData.GroupJoin(
aData,
c => c.Id,
a => a.Id,
(c, joined) => new { c, a = joined.DefaultIfEmpty() })
.ToList();
在我的测试数据中,没有匹配项。所以,我有这个代码:
var difference = groupjoin.FirstOrDefault(g =>
g.a == null);
我期待difference
成为一个带有" c"的匿名对象。属于cData
的对象的属性,以及" a"属性为null。
但是,g.a == null
永远不会成立,因此FirstOrDefault
会为difference
提供空值。事实上,g.a
是DefaultIfEmptyIterator
,而g.a.ToList()
的计数为1,g.a.ToList[0] == null
为真。
我在这里做错了什么?
答案 0 :(得分:3)
DefaultIfEmpty
的工作原理。如果集合为空,则此方法返回具有一个元素(类型参数的默认值)的集合。
因此,在您的情况下,如果没有匹配项,joined.DefaultIfEmpty()
将返回仅包含一个元素的集合,即null
作为参考类型。
如果您希望null
为joined
时为空,请尝试以下操作:
joined.Any() ? joined : null
您可以详细了解DefaultIfEmpty
here。