很抱歉,如果这个问题已经提出,但经过几个小时的搜索,我似乎找不到如何解决这个问题的方法。我试图在1个表上创建一个左连接,但是当我尝试在另一个表上返回一个列时,引发了一个空引用错误。尝试了一些解决方法,但仍然无效。
这是我的代码。
from t1 in ds.TABLE1
join t2 in ds.TABLE1
on t1.COL2 equals t2.COL1 into j1
from t3 in j1.DefaultIfEmpty()
select new {
t1.COL5,
t3.COL6
};
如果我尝试显示来自t1的所有列,一切都很好,但是一旦我从t3显示cols,就会出现错误。似乎来自t3的空行导致错误。如何确定或者更确切地说防止t3中的空行显示?尝试使用null和dbnull但仍然没有成功。
我感谢任何帮助。感谢
答案 0 :(得分:2)
您需要处理t3
为空的情况。
例如:
from t1 in ds.TABLE1
join t2 in ds.TABLE1
on t1.COL2 equals t2.COL1 into j1
from t3 in j1.DefaultIfEmpty()
select new {
t1.COL5,
Col6: t3 == null ? null : t3.COL6
};
答案 1 :(得分:0)
添加where子句
from t1 in ds.TABLE1
join t2 in ds.TABLE1
on t1.COL2 equals t2.COL1 into j1
from t3 in j1.DefaultIfEmpty()
where t3 != null
select new {
t1.COL5,
t3.COL6
};
答案 2 :(得分:0)
非常抱歉,但忘了提及引发错误的列之一是计算列(带表达式的数据列)。我将列的NULLVALUE属性从THROW EXCEPTION更改为(Null),并在我的select子句中使用内联if,就像提到的松弛一样,它解决了我的问题。
只是想知道,为什么linq没有任何方法来捕获DBNULL值?它可以捕获null但不是dbnull?有什么不同吗?
无论如何,我的问题已经解决了。
谢谢你的帮助。