C#LINQ,其中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" },
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())
... 

最新更新