LINQ C#复杂的嵌套结构

Tib*_*mso 3 c# linq

我设法从对象的复杂结构中做出选择,但只有在foreach的帮助下,我怎样才能避免这个foreach并解决我的问题,只需使用LINQ?

        var product = new List<ProductCrp>
        {
            new ProductCrp {
                Strucutre = new StructureItem() {
                    CheckList = new CheckList() {
                        Checks = new List<Check>
                        {
                            new Check { NumberAsInt = "149" },
                            new Check { NumberAsInt = "260" },
                            new Check { NumberAsInt = null }
                        }
                    }
                }
            },
            new ProductCrp {
                Strucutre = new StructureItem() {
                    CheckList = new CheckList() {
                        Checks = new List<Check>
                        {
                            new Check { NumberAsInt = "261" },
                            new Check { NumberAsInt = "150" },
                            new Check { NumberAsInt = "260" }
                        }
                    }
                }
            }
        };

        string[] numbers = { "149" };
Run Code Online (Sandbox Code Playgroud)

LINQ:

        foreach (var item in product)
        {
            item.Strucutre.CheckList.Checks = item.Strucutre.CheckList.Checks.Where(w => numbers.Contains(w.NumberAsInt)).Select(w => w);
        }
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 10

我设法从对象的复杂结构中做出选择,但只有在foreach的帮助下,我怎样才能避免这个foreach并解决我的问题,只需使用LINQ?

您没有为此目的使用LINQ.你foreach正确使用.

LINQ用于查询数据.甲foreach环是关于反复产生副作用.你的身体foreach正在改变一个物体的属性; 这是一个更新,而不是一个查询,所以你做得对.使用LINQ是错误的; 不要这样做.

例如,用于ToList强制查询具有副作用的迭代的答案是非常糟糕的样式,并导致代码效率低,难以理解,难以维护,并且违背查询运算符的目的.永远不要滥用LINQ.我们在语言中构建了一个构造,意思是"每个集合元素执行一次此操作",并调用它foreach.用它.