2013-04-10 72 views
0

我有这个LINQ语句试图设置string []的集合中的第一个元素。但它不起作用。声明不更新数据项

以下是LINQ声明。

docSpcItem.Where(x => x.DocID == 2146943) 
      .FirstOrDefault() 
      .FinishingOptionsDesc[0] = "new value"; 

public string[] FinishingOptionsDesc 
{ 
     get 
     { 
      if (this._FinishingOptionsDesc != null) 
      { 
       return (string[])this._FinishingOptionsDesc.ToArray(typeof(string)); 
      } 
      return null; 
     } 
     set { this._FinishingOptionsDesc = new ArrayList(value); } 
} 

我上面的LINQ声明有什么问题?

+0

并使用'FirstOrDefault(X => x.DocID == 2146943)'代替。 – abatishchev 2013-04-10 06:29:05

+0

只需注意LINQ语句只是(只读)“select语句”。除了通过将选定数据复制到另一个数据结构 – 2013-04-10 10:53:25

回答

2

几件事..你的get和set有一些问题。我只想用自动属性这样的..

public class DocSpcItem 
{ 
    public string[] FinishingOptionsDesc { get; set; } 
    public int DocID { get; set; } 
} 

下一页为您的LINQ语句,这取决于项目的存在与2146943一个id,你可能会设置对象的新版本,而不是一个你意。这应该工作..

[TestMethod] 
public void Linq() 
{ 
    var items = new List<DocSpcItem>(); 
    //2146943 
    for (var i = 2146930; i <= 2146950; i++) 
    { 
     items.Add(new DocSpcItem() 
        { DocID = i 
         , FinishingOptionsDesc = new string[] 
           { i.ToString() } 
        } 
       ); 
    } 

    var item = items.FirstOrDefault(i => i.DocID == 2146943); 
    if (item != null) 
    { 
     item.FinishingOptionsDesc = new string[]{"The New Value"}; 
    } 
} 

public class DocSpcItem 
{ 
    public string[] FinishingOptionsDesc { get; set; } 
    public int DocID { get; set; } 
} 

enter image description here

+0

之外,通过它设置数据是不明智的。有用.... – 2013-04-10 06:24:47