我有以下列表
var list1 = new List<Items>()
{
new Items { Id = 1, Name = "PC" },
new Items { Id = 2, Name = "Mug" },
new Items { Id = 3, Name = "Table" },
new Items { Id = 4, Name = "Table" }
};
var list2 = new List<string> { "Mug", "Table", "Buld" };
我正在尝试获得一个列表,其中list1包含list2而没有重复
var list1 = new List<Items>()
{
new Items { Id = 1, Name = "PC" },
new Items { Id = 2, Name = "Mug" },
new Items { Id = 3, Name = "Table" }
};
这是我尝试过但不起作用的
var result = list1.Where(t1 => list2.Any(x => x == t1.Name)).ToList();
类似这样的东西:
var result = list1
.Where(item => list2.Contains(item.Name)) // Name must be in list2
.GroupBy(item => item.Name)
.Select(group => group.First()) // no duplicates: 1st item from each group
.ToList();
有一个问题:当有重复项时,应该取哪一项。在上面的代码中,我取list1
中最先出现的项目。如果你想拿Id
最小的物品,你应该修改Select
:
...
.Select(group => group.OrderBy(item => item.Id).First())
...