我正在尝试将以下 SQL 查询转换为 LINQ,但我收到“未设置对象实例的对象引用”。
SQL 查询
SELECT a.ID_TARGET,a.TARGET_NAME, b.OBJECTIVE_NAME, c.PERSPECTIVE_NAME FROM IL_OPR_MTR_TGT AS a
LEFT JOIN IL_OPR_MTR_OBJ b ON a.TARGET_OBJECTIVE_ID = b.ID_OBJECTIVE
LEFT JOIN IL_OPR_MTR_PRSPCT c ON b.OBJECTIVE_PERSPECT_ID = c.PERSPECTIVE_ID;
SQL 输出
ID_TARGET |TARGET_NAME |OBJECTIVE_NAME |PERSPECTIVE_NAME
----------|-------------|---------------|----------------
7 |TGT_01 | TST02 |PERSPECTIVE_01
8 |TGT01 | TST02 |PERSPECTIVE_01
9 |TARGET_02 | TST02 |PERSPECTIVE_01
10 |TARGET003AA | (null) |(null)
LINQ 查询
var data = (from a in allTargets
join b in allObjectives on a.TARGET_OBJECTIVE_ID equals b.ID_OBJECTIVE into partial1
from b in partial1.DefaultIfEmpty()
join c in allPerspectives on b.OBJECTIVE_PERSPECT_ID equals c.PERSPECTIVE_ID into partial2
from c in partial2.DefaultIfEmpty()
select new
{
ID_TARGET = a.ID_TARGET,
TARGET_NAME = a.TARGET_NAME,
OBJECTIVE_NAME = b != null ? b.OBJECTIVE_NAME : "",
PERSPECTIVE_NAME = c != null ? c.PERSPECTIVE_NAME : ""
}).ToList();
我想问题出在这里,因为我正在尝试连接两个 NULL 值,但我不知道如何解决这个问题...
join c in allPerspectives on b.OBJECTIVE_PERSPECT_ID equals c.PERSPECTIVE_ID into partial2
from c in partial2.DefaultIfEmpty()
最佳答案
您必须在查询中对 b
进行空检查,例如:
join c in allPerspectives on (b == null ? "no-value" : b.OBJECTIVE_PERSPECT_ID) equals c.PERSPECTIVE_ID
关于c# - LINQ - 具有可为空值的多个左联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38397957/