LINQ to Dataset Left Join

时间:2010-11-16 03:32:23

标签: linq join nullreferenceexception

很抱歉,如果这个问题已经提出,但经过几个小时的搜索,我似乎找不到如何解决这个问题的方法。我试图在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但仍然没有成功。

我感谢任何帮助。感谢

3 个答案:

答案 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?有什么不同吗?

无论如何,我的问题已经解决了。

谢谢你的帮助。