我有3个级别的列表,一个列表如下
ProductResults
ErrorNo
ErrorString
Products
ProductNo
ProductName
SVNID
ProductOrders
OrderNo
DateOfOrder
UDEID
我想检查最低列表中UDEID的值。如果值为77,则我要更新上面“产品”列表中的SVNID。我该如何实现?我在下面尝试过
ProductResultsList.Where(x => x.Products.Any(y => y.ProductOrders.Any(z => z.UDEID == 77))).ToList().
ForEach(u =>
{
u.Products.ForEach(v => v.SVNID = 90);
});
我的数据
ProductResultsList.ErrorNo = 0
ProductResultsList.ErrorString = ""
ProductResultsList.Products[0].ProductNo = "XY6789U"
ProductResultsList.Products[0].ProductName = "OrangeJuice"
ProductResultsList.Products[0].SVNID = 100
ProductResultsList.Products[0].ProductOrders[0].OrderNo = 201
ProductResultsList.Products[0].ProductOrders[0].DateOfOrder = 28/09
ProductResultsList.Products[0].ProductOrders[0].UDEID = 77
ProductResultsList.Products[1].ProductNo = "XY4569U"
ProductResultsList.Products[1].ProductName = "AppleJuice"
ProductResultsList.Products[1].SVNID = 100
ProductResultsList.Products[1].ProductOrders[0].OrderNo = 202
ProductResultsList.Products[1].ProductOrders[0].DateOfOrder = 28/09
ProductResultsList.Products[1].ProductOrders[0].UDEID = 88
上述问题是将所有Products.SVNID更新为90。我只想更新Products [0]而不是Products [1]。我确实知道为什么会这样,因为我的ForEach是ProductResults,但是后来我不知道该怎么做。
请帮助
答案 0 :(得分:4)
您的问题在于第一个外部“ Any”:
ProductResultsList.Where(x => x.Products.Any( 'condition'))
由于满足了“条件”,因为有“任何”产品,其ProductOrder的UEID = 77,所以您将所有ProductResult撤回了ForEach
您应该“插入”更深的循环,例如(未经测试):
ProductResultsList.ForEach(productResult => {
productResult.Product.Where(product =>
product.Any('yourCondition')).ToList()
.ForEach('your action')
侧面说明:为什么不将其提取为常规方法?如您所见,很难从一开始就跟踪正在发生的事情。使用命名方法会更容易。