不是执行此可怕的循环,而是实现了所需的结果:
foreach (var mealsViewModel in mealsListCollection)
{
foreach (var VARIABLE in mealsViewModel.Items)
{
foreach (var d in VARIABLE.ArticlesAvailable)
{
d.ArticleQty = 0;
}
}
}
我正在尝试使用linQ语句实现相同的结果:
mealsListCollection.ForEach(u =>
u.Items.Select(o => o.ArticlesAvailable.Select(c =>
{
c.ArticleQty = 0;
return c;
})));
但是linQ语句不会将ArticleQty
重置为零
我做错了什么?为什么?
答案 0 :(得分:1)
将linq更改为ForEach
,因为Select
不会以您想要的方式遍历collection
。
MSDN定义:-
Select
将序列的每个元素投影为新形式。
ForEach
对列表的每个元素执行指定的操作。
mealsListCollection.ForEach(u =>
u.Items.ForEach(o =>
o.ArticlesAvailable.ForEach(c =>
{
c.ArticleQty = 0;
})));
答案 1 :(得分:0)
您在做的错误是:select返回相同的集合,但是直到对象被迭代为止才有效。坐在foreach调用中,选择位于执行路径之外。 (请查看评论以获取更多信息)。
调用中的.select()本身并没有什么特别之处,但可以确定返回列表的外观。 .select()。ToList()遍历集合,并应用投影。
如果您要设置一个等于.select调用的变量,但从不访问其中的数据,则这些值本质上仍将是它们的起始名称。一旦您遍历或选择一个特定元素,它将立即应用投影。
将选择项更改为每个vasily的注释将为您提供所需的结果。
我是否可以建议您进一步将值设置为等于0(向上或向下)? -在不知道用例的情况下,也许有比您选择的位置更好的默认值将其重置为0? (自动映射器,初始化器等)
答案 2 :(得分:0)
使用SelectMany遍历嵌套列表的树。最后使用ForEach函数来完成工作:
base::mean()