在LINQ中执行LEFT JOIN后如何返回NULL值?

时间:2019-03-28 03:19:15

标签: c# linq

我在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

  

对象引用未设置为对象的实例

3 个答案:

答案 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并使用该对象获取列,以便可以在列中获取空值。