Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用linq更新列表中的列表_C#_Linq - Fatal编程技术网

C# 使用linq更新列表中的列表

C# 使用linq更新列表中的列表,c#,linq,C#,Linq,我有3个级别的列表,一个在另一个中,如下所示 ProductResults ErrorNo ErrorString Products ProductNo ProductName SVNID ProductOrders OrderNo DateOfOrder UDEID 我想检查最低列表中UDEID的值。如果值是77,那么我想更新上面产品

我有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。我只想更新产品[0],而不是产品[1]。我确实理解为什么会这样,因为我的ForEach是ProductResults,但我不知道如何做我想做的事


请帮助

您的问题在于第一个外部“Any”:

由于“条件”已满足,因为存在“任意”产品,其ProductOrder的UEID=77,因此您可以将所有ProductResult返回给ForEach

您应该将循环“插入”得更深一些,例如(未测试):


旁注:为什么不用常规方法提取呢?正如你所看到的,很难从一开始就追踪到底发生了什么。使用命名方法会更容易。

尝试
u.Products[0]。SVNID=90而不是
u.Products.ForEach(v=>v.SVNID=90)这将仅更新产品中的第一项。我想在整个列表中这样做。请注意,Linq中的Q表示“查询”。您正在尝试更新
ForEach
不是Linq的一部分,因此您正在使用Linq(例如,
Where
任何
调用,但您的解决方案可能不涉及Linq。)。感谢这项工作——虽然我必须在ForEach之前添加ToList(),但这是一个完美的解决方案linq@user2837961请随意编辑我的答案,以放置正确的、经过测试的解决方案。我的答案是在我的(不是很理想的)头脑中编译的。我已经编辑了正确工作的答案
ProductResultsList.Where(x => x.Products.Any( 'condition'))
ProductResultsList.ForEach(productResult => {
    productResult.Product.Where(product => 
        product.Any('yourCondition')).ToList()
    .ForEach('your action')