首页 > 解决方案 > 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();

标签: c#linq

解决方案


像这样的东西:

   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())
      ... 

推荐阅读