1

私は持っていList<Item>ます。

LINQ を使用して同じリストに親を持つアイテムを削除するにはどうすればよいですか?

可能であれば、メソッドチェーン式を好みます。

アイテムの定義:

public class Item {
        public int Id { get; set; }
        public int ParentId { get; set; }
    }
4

2 に答える 2

3
var Children = List.Where(child => List.Any(parent => parent.Id == child.ParentID)).ToList();
List.RemoveAll(child => Children.Contains(child));
于 2013-03-28T11:30:54.800 に答える
3

これは役立つかもしれません

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
于 2013-03-28T11:29:40.590 に答える