Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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# 删除列表中的列表_C#_Linq - Fatal编程技术网

C# 删除列表中的列表

C# 删除列表中的列表,c#,linq,C#,Linq,我有一个存储列表实例的列表。我想从IdName==149的子列表中删除该对象 List<Product> productList = new List<Product>() { new Product() { Id = 1, Model = "Phone", TypeProd = new Check

我有一个存储列表实例的列表。我想从IdName==149的子列表中删除该对象

        List<Product> productList = new List<Product>()
        {
            new Product()
            {
                Id = 1,
                Model = "Phone",
                TypeProd = new CheckTypes() { ChTypes = new List<CHType> { new CHType() { Id =  8, IdName = "261"}, new CHType () {Id = 9 , IdName = "149" } } }

            },
            new Product()
            {
                Id = 1,
                Model = "Printer",
                TypeProd = new CheckTypes() { ChTypes = new List<CHType> { new CHType() { Id =  8, IdName = null}, new CHType () {Id = 8 , IdName = "261" } } }
            }
        };

        var pr = productList.Select(s => s.TypeProd).Where(w => w.ChTypes.Any(a => a.IdName != null && a.IdName.Contains("149"))).ToList();
        // I
        var pr0 = pr.Select(s => s.ChTypes).Where(w => w.Any(a => a.Id == 9)).ToList();
        // II
        var pr1 = pr.Select(s => s.ChTypes).Except(pr0);
        // III
        pr.Select(s=>s.ChTypes).ToList().RemoveAll(a => a.Any(item => item.IdName.Contains("149")));
        foreach (var item in pr)
        {
            foreach (var item2 in item.ChTypes)
            {
                Console.WriteLine(item2.IdName);
            }

            Console.WriteLine("End");
        }

        Console.ReadKey();

我可以删除整个序列,但是如何从序列中删除一个元素?

使用Remove删除给定的项目,或者使用RemoveAt删除给定位置的项目。

我认为,您让它变得比需要的更复杂。您只需遍历所有ChTypes列表并删除不需要的ChTypes。通过下面的代码可以很容易地完成

foreach (var chType in productList.Select(prod => prod.TypeProd.ChTypes))
    chType.RemoveAll(c => c.IdName != null && c.IdName.Contains("149"));
pr、pr0、pr1和pr.Select.ToList.RemoveAll的所有LINQ行都是不必要的。另外,在您当前的代码中,您只选择Id=9的CHType,不确定这是错误的还是您的代码是正确的,但您的问题没有指定它

既然OP坚持要避免foreach,那么下面的方法是不好的

productList.Select(prod => prod.TypeProd.ChTypes)
           .Select(chType => chType.RemoveAll(c => c.IdName != null && c.IdName.Contains("149")))
           .ToList();

非常感谢,但所有的兴趣都在linq。使用循环,这很容易实现do@Tibomso您能解释一下为什么需要使用LINQ从嵌套列表中删除元素吗?LINQ通常用于提取sql中的think select信息,而不是对其进行变异。