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

myList.Distinct().ToList();


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

例:
myList看起来像这样:

(1,'A', "Normal"),
(2,'B', "Normal"),
(3,'A', "Normal"),
(4,'C', "Normal"),
(5,'C', "Normal"),
(6,'A', "Normal");


结果如下:

(1,'A', "Multiple"),
(2,'B', "Normal"),
(4,'C', "Multiple")


编辑:

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

myList.GroupBy(x => x.Letter).Select(x => x.First()).ToList();

最佳答案

您可以使用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")
                              });


已修订(仅根据“字母”而不是“ 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")
                              });


假设您的课程如下所示:

public class Model
{
       public int ID {get;set;}
       public string Letter {get;set;}
       public string Type {get;set;}
}

关于c# - 从列表中删除重复项,但保留一个并进行编辑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60483584/

10-13 08:38