I have a List<Item>
.
How can I remove items that have parents in the same list using LINQ?
If it is possible I prefer method chain expression.
Item definition:
public class Item {
public int Id { get; set; }
public int ParentId { get; set; }
}
This may help
List<Item> items = new List<Item>();
items.Add(new Item() { Id = 1, ParentId = 2 });
items.Add(new Item() { Id = 2, ParentId = 0 });
items.Add(new Item() { Id = 3, ParentId = 0 });
items.Add(new Item() { Id = 4, ParentId = 1 });
items.Add(new Item() { Id = 5, ParentId = 1 });
items.Add(new Item() { Id = 6, ParentId = 4 });
items.Add(new Item() { Id = 7, ParentId = 4 });
items.Add(new Item() { Id = 8, ParentId = 4 });
items.Add(new Item() { Id = 9, ParentId = 4 });
items.Add(new Item() { Id = 10, ParentId = 4 });
items.Add(new Item() { Id = 11, ParentId = 4 });
var shouldBeRemove =
(from i in items
where items.Any(input => input.Id == i.ParentId)
select i).ToList();
items.RemoveAll(input => shouldBeRemove.Contains(input));
//Those who remain
//item with Id = 2
//item with Id = 3
var Children = List.Where(child => List.Any(parent => parent.Id == child.ParentID)).ToList();
List.RemoveAll(child => Children.Contains(child));
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.