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