使用LINQ更新对象列表
基本上,我将人员列表绑定到silverlight datagrid,第一行是id为1的主要人员,每列都有一个复选框,默认情况下,它们都被选中作为主要人员。第二行等等,不检查任何内容,场景是,如果用户不需要默认值,那么他们可以检查其他人的其他列,但一旦他们检查了其他列,则应自动取消检查主要人的列,反之亦然,这仅适用于同一列。示例第1列是年龄,第2列是姓名,默认情况下,会检查主要人员的年龄,如果我不喜欢这些数据,我可以检查任何其他人的年龄,而不检查主要人员的年龄。我亲自将复选框绑定到bool值。因此,我需要一个方法,该方法接受捕获的行id和检查的属性的名称使用LINQ更新对象列表,linq,Linq,基本上,我将人员列表绑定到silverlight datagrid,第一行是id为1的主要人员,每列都有一个复选框,默认情况下,它们都被选中作为主要人员。第二行等等,不检查任何内容,场景是,如果用户不需要默认值,那么他们可以检查其他人的其他列,但一旦他们检查了其他列,则应自动取消检查主要人的列,反之亦然,这仅适用于同一列。示例第1列是年龄,第2列是姓名,默认情况下,会检查主要人员的年龄,如果我不喜欢这些数据,我可以检查任何其他人的年龄,而不检查主要人员的年龄。我亲自将复选框绑定到bool值。因此
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 });
List l=新列表();
l、 添加(newperson(){Id=1,Age=20,IsFirstNameSelected=false,IsLastNameSelected=false});
l、 添加(newperson(){Id=2,Age=28,IsFirstNameSelected=true,IsLastNameSelected=true});
l、 添加(newperson(){Id=3,Age=22,IsFirstNameSelected=true,IsLastNameSelected=true});
像这样的
我刚刚检查了对象是否是第一个,但您也可以应用其他条件 我不确定我是否正确理解了这个问题,但如果您的意思是,对于指定的个人ID,您希望更新
IsLastNameSelected
和IsFirstNameSelected
的属性,以获得指定个人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),
});
intid=1;
IEnumerable updatedList=
l、 选择(person=>newperson()
{
Id=person.Id,
年龄=人。年龄,
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),
});
您的问题是什么?你的解释使我困惑;-)@我对我的问题做了更多的解释,谢谢你的回答。我用解释编辑了我的问题。您的回复只接受ID,我需要一个接受ID和bool属性名称的方法。我的例子只显示了2个,但实际上我还有20个。
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),
});