2013-04-09 77 views
0

美好的一天!使用LINQ更新項目,不工作

我有這個疑問如下圖所示:

jt.SummarySpecs.Where(
x => true 
) 
.FirstOrDefault() 
.DocSpecs 
.Where(
    x => x.DocID == x.DocID 
) 
.FirstOrDefault() 
.FinishingOptionsDesc[0] = option; 

但是,當代碼得到執行,對於finishingOptionsDesc [0]值不更新......

有什麼錯上面的查詢?


的類屬性:

"SummarySpecs.cs" 
    public DocSpec[] DocSpecs { get; set; } 

"DocSpecs.cs" 
    public string[] FinishingOptionsDesc { get; set; } 

我唯一擔心的是更新FinishingOptionDesc 1弦。

謝謝

+0

要在where子句中, 「x.DocSpecs == x.DocSpecs」,導致兩個相同的事做...... – 2013-04-09 06:47:31

+0

我打算這樣做,以便我可以檢查「DocSpecs」對象下的數據。對不起,我在LINQ中仍然是新的...... – 2013-04-09 06:50:33

+0

請參閱,而不是在兩側給出相同的值,請給出一些靜態值,如1,2,並查看其是否更新....其中(x => x.DocID == 1) – 2013-04-09 06:59:49

回答

1

這個錯誤意味着什麼是空的。在可能有空返回值的語句中,您有4個未經檢查的地方。如果這些集合是空的,那麼對FirstOrDefault的任何一個調用都可以返回null。或者DocSpecs在返回的對象上可能爲null,或者FinishingOptionsDesc可能爲null。

理想情況下,你會稍微打破這個聲明並插入空檢查。你可以說你知道這些點都不應該是有史以來爲空。如果是這種情況,允許發生異常可能是有效的,但可以說,仍然有必要分解聲明以更好地錯誤報告發生異常的位置。

0

嘗試是這樣的.. UPDATE

if(jt.SummarySpecs.Select(a=>a.DocSpecs).Any()) 
{ 
    var docSpecs = jt.SummarySpecs.Select(a => a.DocSpecs) 
    docSpecs.FinishingOptionsDesc[0] = option; 
} 
+0

它不會工作。如果(jt.SummarySpecs.DocSpecs.Any())。在「SummarySpecs」之後,DocSpecs沒有選擇。可能的選項是「where,select,any ...」 – 2013-04-09 07:57:20

+0

請參閱我的更新... – 2013-04-09 08:28:13

+0

仍然不工作.... :( – 2013-04-09 09:01:05