我在LINQ中创建了一个LEFT JOIN。如何获取查询以返回可为空的值?
+------+------+------+
| c1 | c2 | c3 |
|------+------+------|
| x1 | y1 | z1 |
| x2 | y2 | null |
| x3 | y3 | z1 |
+------+------+------+
基本上是LEFT JOIN之后按预期返回的SQL表
但是使用LINQ:
var query =
```
into temp
from t in temp.DefaultIfEmpty()
select new
{
```,
```,
Column3 = (int?)t.ColumnNo
};
调试器对我ks叫Column3
:
对象引用未设置为对象的实例
答案 0 :(得分:0)
如果列值为空,则可以使用??
设置默认值:
select new{
```,
```,
Column3 = (t.c3 ?? 0) // if null set its value to zero
};
答案 1 :(得分:0)
由于您的DefaultIfEmpty()
,结果t
可能为空。当然,您不能从空对象获得ColumnNo
。
快速的解决方案是使用null conditional operator::
Column3 = t?.ColumnNo; // assuming ColumnNo is already an int? otherwise cast to int?
具有与以下相同的作用:
Column3 = (t.ColumnNo != null) t.ColumnNo : null;
其他人建议的null coalescing operator无效:
Column3 = (t.c3 ?? 0)
如果t
等于null,则无法获得t.c3
,因此无法检查t.c3
是否等于null。
答案 2 :(得分:0)
var list = (from PM in DataContext.table1
join U in DataContext.table2 on PM.Id equals U.Id into obj1
from U1 in obj1.DefaultIfEmpty()
select new
{
Professions = U1.ProfessionName // If null
});
您可以使用DefaultIfEmpty并使用该对象获取列,以便可以在列中获取空值。