使用 linq C# 更新列表
updating a list using linq C#
我有一个列表,其中我想更新的是来自所有用户的活动标志
userList:[
{'name':'a', isActive:'Y'},
{'name':'b', isActive:'N'},
{'name':'c', isActive:'Y'},
{'name':'d', isActive:'N'},
];
我想将 isActive 从 Y 更改为 N,然后从 N 更改为 Y,我的更新列表如下所示
userList:[
{'name':'a', isActive:'N'},
{'name':'b', isActive:'Y'},
{'name':'c', isActive:'N'},
{'name':'d', isActive:'Y'},
];
我怎样才能做到这一点?
LINQ 代表 Language Integrated Query - 它是一种用于查询而非修改数据的工具。 LINQ 查询不应有副作用,例如“每次 运行 它都会更改数据并给出不同的答案”。更改与被查询数据无关的其他数据也是一个副作用..
如果您想使用基于 lamdba 的方法永久更改列表中的项目,您可以在列表上使用 ForEach
- 这不是 LINQ 的东西;这是一个列表的东西:
myList.ForEach(item => item.isActive = (item.isActive == 'Y' ? 'N' : 'Y'));
..但这与 Matt Watson 在评论中发布的代码没有显着差异,使用正常的 foreach
如果你想calculate-every-time-from-the-data当前活动的倒数,用LINQ就可以了:
myList.Select(item =>
new Item{
name = item.name,
isActive = (item.isActive == 'Y' ? 'N' : 'Y')
}
);
你可以运行一遍又一遍,输出稳定;如果 myList 数据未更改,则此输出将是一个列表,其中包含处于活动状态的项目
这是一个有副作用的 LINQ 查询;它每次修改数组 运行s:
第一次,Select 做了 a[idx]++
,例如将数组索引 0 从 1 增加到 2,但是 ++
操作 returns 增量之前的值,例如1(a[0]
现在是 2)。这意味着您看到“原始数组”,即 1, 2, 3, 4
反映在 z1
结果中,但是 z2
是向上的一次(并且 a
充满了被撞了两次的数字)
不要这样做;它会引起很多问题。 (我故意没有把代码放在文本中,以阻止copy-pasting我们不应该写的代码)
我有一个列表,其中我想更新的是来自所有用户的活动标志
userList:[
{'name':'a', isActive:'Y'},
{'name':'b', isActive:'N'},
{'name':'c', isActive:'Y'},
{'name':'d', isActive:'N'},
];
我想将 isActive 从 Y 更改为 N,然后从 N 更改为 Y,我的更新列表如下所示
userList:[
{'name':'a', isActive:'N'},
{'name':'b', isActive:'Y'},
{'name':'c', isActive:'N'},
{'name':'d', isActive:'Y'},
];
我怎样才能做到这一点?
LINQ 代表 Language Integrated Query - 它是一种用于查询而非修改数据的工具。 LINQ 查询不应有副作用,例如“每次 运行 它都会更改数据并给出不同的答案”。更改与被查询数据无关的其他数据也是一个副作用..
如果您想使用基于 lamdba 的方法永久更改列表中的项目,您可以在列表上使用 ForEach
- 这不是 LINQ 的东西;这是一个列表的东西:
myList.ForEach(item => item.isActive = (item.isActive == 'Y' ? 'N' : 'Y'));
..但这与 Matt Watson 在评论中发布的代码没有显着差异,使用正常的 foreach
如果你想calculate-every-time-from-the-data当前活动的倒数,用LINQ就可以了:
myList.Select(item =>
new Item{
name = item.name,
isActive = (item.isActive == 'Y' ? 'N' : 'Y')
}
);
你可以运行一遍又一遍,输出稳定;如果 myList 数据未更改,则此输出将是一个列表,其中包含处于活动状态的项目
这是一个有副作用的 LINQ 查询;它每次修改数组 运行s:
第一次,Select 做了 a[idx]++
,例如将数组索引 0 从 1 增加到 2,但是 ++
操作 returns 增量之前的值,例如1(a[0]
现在是 2)。这意味着您看到“原始数组”,即 1, 2, 3, 4
反映在 z1
结果中,但是 z2
是向上的一次(并且 a
充满了被撞了两次的数字)
不要这样做;它会引起很多问题。 (我故意没有把代码放在文本中,以阻止copy-pasting我们不应该写的代码)