【问题标题】:C# LINQ where list1 contains list2 without duplicatesC# LINQ,其中 list1 包含没有重复的 list2
【发布时间】:2021-07-10 13:30:57
【问题描述】:

我有以下列表

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


【解决方案1】:

类似这样的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-09
    • 2020-11-12
    • 1970-01-01
    • 2021-04-27
    • 2023-03-23
    • 2020-03-25
    • 2020-10-15
    • 1970-01-01
    相关资源
    最近更新 更多