2010-09-14 38 views
1

下面的查询失败,空引用异常当有BOMIDs元素,其中材质ID属性是什么。 我以为'x.MatID isnot Nothing AndAlso'会阻止执行的地方的x.MatID.Process部分。 BOMIDs集合中有几个元素,其中MatID什么也没有。 有什么想法?AndAlso在VB Linq查询,似乎并不奏效

From x In BOMIDs _ 
Group Join y As PurchasedProcess In SpecialProcesses _ 
On x.MatID.PurchasedProcess Equals y.Name _ 
Into G = Group _ 
From z In G.DefaultIfEmpty() _ 
Where x.MatID IsNot Nothing AndAlso _ 
x.MatID.Process = ProcessEnum.PurchasedProcess _ 
Select New With {.Item = x.Item, .Process = z} 

回答

3

AndAlso是没有问题的。将null检查移动到联接之前,以在联接它们之前有效地过滤掉所有null事件。

试试这个更新的查询:

From x In BOMIDs _ 
Where x.MatID IsNot Nothing _ 
Group Join y As PurchasedProcess In SpecialProcesses _ 
On x.MatID.PurchasedProcess Equals y.Name _ 
Into G = Group _ 
From z In G.DefaultIfEmpty() _ 
Where x.MatID.Process = ProcessEnum.PurchasedProcess _ 
Select New With {.Item = x.Item, .Process = z} 
+0

这工作很好,谢谢。仍然习惯Linq,我认为我的头被困在SQL中。 – Kratz 2010-09-14 17:44:42

2

从扫视你的代码,看来此行可能是一个potetntial故障点,以及:

On x.MatID.PurchasedProcess Equals y.Name 

由于x.MatID可以Nothing