从列表中删除重复项但保留一个并进行编辑

Pre*_*esi 2 c# list

我有一个可以包含重复项的列表。因此,由于这个原因,我想删除所有重复项。我知道,我可以用这样的Distinct()方法来做到这一点:

myList.Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)

但是我必须编辑列表中的项目,这是没有从Distinct().

示例:myList 看起来像这样:

(1,'A', "Normal"),
(2,'B', "Normal"),
(3,'A', "Normal"),
(4,'C', "Normal"),
(5,'C', "Normal"),
(6,'A', "Normal");
Run Code Online (Sandbox Code Playgroud)

结果应该如下:

(1,'A', "Multiple"),
(2,'B', "Normal"),
(4,'C', "Multiple")
Run Code Online (Sandbox Code Playgroud)

编辑:

我也知道,我可以用 GroupBy 做到这一点。然后我的列表中也只有一次所有项目:

myList.GroupBy(x => x.Letter).Select(x => x.First()).ToList();
Run Code Online (Sandbox Code Playgroud)

Ehs*_*jad 7

您可以使用 linq 对它们进行分组,然后通过放置条件进行投影,如果分组的行数为 1,则为正常,否则为多个,例如:

var result = list.GroupBy(x => new 
                           { 
                             ID = x.Id, 
                            Text= x.Letter
                         })
                 .Select(x => new Model() 
                             { 
                                ID = x.Key.ID,
                                Letter = x.Key.Letter
                                Type = (x.Count() == 1 ? "Normal" : "Multiple")  
                              });
Run Code Online (Sandbox Code Playgroud)

修订(这仅检查基于字母而不是 Id 的重复项):

var result = list.GroupBy(x => x.Letter)
                 .Select(x => new Model() 
                             { 
                                ID = x.First().Id,
                                Letter = x.Key
                                Type = (x.Count() == 1 ? "Normal" : "Multiple")  
                              });
Run Code Online (Sandbox Code Playgroud)

假设你的班级看起来像:

public class Model
{
       public int ID {get;set;}
       public string Letter {get;set;}
       public string Type {get;set;}
}
Run Code Online (Sandbox Code Playgroud)