2013-04-09 79 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