以下查詢由多個INNER JOIN
子句組成。應引用一個空變量異常
Student
表中有很多外鍵在查詢中被替換爲名稱。我正在使用下面的LEFT OUTER JOIN
查詢。請注意,中的Students
可以是null
。這意味着marksGroup.DefaultifEmpty()
也可能會返回null
。因此,如果我在最後一行中只輸入m
而不是m != null ? m.MarkName : "-- Not marked --"
,那麼當m
爲空時,代碼IMO應該引發異常,因爲我指的是這個變量,但它沒有。在我構建此查詢的示例上,編譯器拋出異常。請參閱代碼:
var result = from st in dbContext.Students where st.DepartmentID == 17
join d in dbContext.Departments on st.DepartmentID equals d.DepartmentID
join sv in dbContext.SoftwareVersions on st.SoftwareVersionID equals sv.SoftwareVersionID
join stat in dbContext.Statuses on st.StatusID equals stat.StatusID
join m in dbContext.Marks on st.MarkID equals m.MarkID into marksGroup
from m in marksGroup.DefaultIfEmpty()
select new
{
student = st.StudentName,
department = p.DepartmentName,
software = sv.SoftwareVersionName,
status = st.StatusName,
marked = m != null ? m.MarkName : "-- Not marked --"
};
我錯過了什麼。我仍然是初學者,在C#和LINQ。
''[...]如果我只把米''。引用該對象不會引發異常。但是,對其執行任何操作,**都會拋出一個**。也就是說,試圖調用一個方法或一個屬性。例如,'marked = m'不應該拋出任何異常,你只是引用該對象。 'marked = m.MarkName',但是,如果'm == null'應該拋出一個** NullReferenceException **。 – 2014-11-21 11:14:14
你的意思是你認爲'marked = m'應該拋出異常嗎? – 2014-11-21 11:14:22
@MatiCicero謝謝Mati。這解釋了我和這個例子之間的區別。我再次查看了示例代碼,作者確實試圖引用空對象的屬性:)乾杯! – Celdor 2014-11-21 11:26:32