删除列表中的列表
问题描述:
我有一个存储列表实例的列表。我想从与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
List
并删除不需要的ChType
。它可以通过下面的代码很容易地完成
foreach (var chType in productList.Select(prod => prod.TypeProd.ChTypes))
chType.RemoveAll(c => c.IdName != null && c.IdName.Contains("149"));
你所有的LINQ
线pr
,pr0
,pr1
和pr.Select().ToList().RemoveAll()
都是不必要的。此外,在您当前的代码中,您仅拾取CHType
与,不确定这是错误还是代码正确,但是您的问题未能指定。下面
由于OP坚持避免foreach
是做
productList.Select(prod => prod.TypeProd.ChTypes)
.Select(chType => chType.RemoveAll(c => c.IdName != null && c.IdName.Contains("149")))
.ToList();
非常感谢你的一个坏
LINQ
方式,但所有的兴趣是LINQ。使用循环,这很容易做 – Tibomso@Tibomso你能解释为什么你需要使用'LINQ'从嵌套列表中删除元素吗? 'LINQ'通常用于提取(认为select in sql)信息,而不是改变它们。 – Vikhram