使用LINQ更新对象列表

时间:2012-02-17 19:53:00

标签: linq

基本上我将Person列表绑定到silverlight datagrid,第一行是id 1的主要Person,每列都有一个复选框,默认情况下它们都是为主要人员检查的。没有检查第二行等等,情况是如果用户不想要默认值,那么他们可以检查来自其他人的其他列,但是一旦他们检查它们,主要人员应该自动取消选中反之亦然,这仅适用于同一列。示例列1是Age,第2列是Name,然后默认是为主要人员检查它们,如果我不喜欢该数据,我可以从任何其他人检查Age,这将从主要人员中取消选中Age。我正在将复选框绑定到bool值。所以,我需要一个方法来获取捕获的行id和已检查的属性的名称。

   List<Person> l = new List<Person>();
        l.Add(new Person() { Id = 1, Age = 20, IsFirstNameSelected = false, IsLastNameSelected  = false });
        l.Add(new Person() { Id = 2, Age = 28, IsFirstNameSelected = true, IsLastNameSelected = true }); 
        l.Add(new Person() { Id = 3, Age = 22, IsFirstNameSelected = true, IsLastNameSelected = true });

2 个答案:

答案 0 :(得分:0)

l.ForEach(p=> {if (p!= l.First()
                     {p.IsFirstNameSelected  = !l.First().IsFirstNameSelected }
              });

那样的东西?

我刚刚检查过该对象是否是第一个,但您也可以应用其他条件。

答案 1 :(得分:0)

我不确定我是否正确理解了这个问题,但是如果你的意思是指对于指定的人ID,你想要更新IsLastNameSelectedIsFirstNameSelected的属性以使相应的属性为负数如果指定的人员ID,则执行此操作:

int id = 1; 

IEnumerable<Person> updatedList = 
    l.Select( person => new Person()
    {
        Id = person.Id,
        Age = person.Age,
        IsFirstNameSelected = person.Id == id ? person.IsFirstNameSelected : !(l.Single( p => p.Id == id).IsFirstNameSelected),
        IsLastNameSelected = person.Id == id ? person.IsLastNameSelected : !(l.Single( p => p.Id == id).IsLastNameSelected),            
    });