我有一个可以包含重复项的列表。因此由于这个原因,我想删除所有重复项。我知道,我可以使用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/