Statement不是更新数据项

时间:2013-04-10 05:21:28

标签: c# linq data-structures collections linq-to-objects

我有这个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声明出了什么问题?

1 个答案:

答案 0 :(得分:2)

一些事情..你的获取和设置存在一些问题。我会像这样使用自动属性..

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

您的linq语句的下一步,根据ID为2146943的项目的存在,您可能正在设置对象的新版本而不是您想要的对象。这应该有用..

[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