2013-02-06 25 views
4

使用LINQ对象列表的更新只有单个项目要更新它具有文本属性“ALL”我如何在C#

public class Season 
{ 
    public string Text {get;set;} 
    public string Value {get;set;} 
    public bool ValueSelected {get;set;} 
} 
+0

你是什么意思更新? – spajce

+0

问题需要澄清。这里是一个基本的LINQ教程http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b –

回答

18

在LINQ的“Q”列表代表“查询”。 LINQ并不意味着更新对象。

您可以使用LINQ找到想要更新的对象,然后“传统地”更新它。

var toUpdate = _seasons.Single(x => x.Text == "ALL"); 

toUpdate.ValueSelected = true; 

此代码假定恰好有一个进入Text == "ALL"。如果没有或者有多个,此代码将抛出异常。

如果没有或一个,使用SingleOrDefault

var toUpdate = _seasons.SingleOrDefault(x => x.Text == "ALL"); 

if(toUpdate != null) 
    toUpdate.ValueSelected = true; 

如果可以有多个,使用Where

var toUpdate = _seasons.Where(x => x.Text == "ALL"); 

foreach(var item in toUpdate) 
    item.ValueSelected = true; 
+0

感谢您的努力,因为我对开发非常陌生,我无法正确发布代码。我已经通过传统方法 – Gowtham

4

你可以使用这样的事情:

// Initialize test list. 
List<Season> seasons = new List<Season>(); 

seasons.Add(new Season() 
{ 
    Text = "All" 
}); 
seasons.Add(new Season() 
{ 
    Text = "1" 
}); 
seasons.Add(new Season() 
{ 
    Text = "2" 
}); 
seasons.Add(new Season() 
{ 
    Text = "All" 
}); 

// Get all season with Text set to "All". 
List<Season> allSeasons = seasons.Where(se => se.Text == "All").ToList(); 

// Change all values of the selected seasons to "Changed". 
allSeasons.ForEach(se => se.Value = "Changed"); 
+0

我只有一个季节项目与“所有”我想只更新该项目,其余项目是保持不变 – Gowtham