C# 使用Linq按列表中的多列分组并标记所有重复项

C# 使用Linq按列表中的多列分组并标记所有重复项,c#,linq,class,C#,Linq,Class,我想使用LinQ查询列表并找到重复的人(定义了重复的人) 具有相同的名字、姓氏和出生日期),并标记每个复制人的姓名 StateOfData属性的字符串为“duplicate”,每个唯一的人的StateOfData属性的字符串为“unique” 公共类人物 { 公共字符串PersonFirstName{get;set;} 公共字符串PersonLastName{get;set;} 公共日期时间PersonDateOfBirth{get;set;} 公共字符串StateOfData{get;set}

我想使用LinQ查询列表并找到重复的人(定义了重复的人) 具有相同的名字、姓氏和出生日期),并标记每个复制人的姓名 StateOfData属性的字符串为“duplicate”,每个唯一的人的StateOfData属性的字符串为“unique”

公共类人物
{
公共字符串PersonFirstName{get;set;}
公共字符串PersonLastName{get;set;}
公共日期时间PersonDateOfBirth{get;set;}
公共字符串StateOfData{get;set}
公共人物(字符串名、字符串名、dateTime出生日期、字符串状态)
{
this.PersonFirstName=firstName;
this.PersonLastName=lastName;
this.PersonDateOfBirth=出生日期;
this.StateOfData=状态;
}
}
IList personList=新列表();
Person pers=新人(“黛安”、“琼斯”、“1967-01-01”、“琼斯”);
人员列表。添加(人员);
Person pers=新人(“黛安”、“琼斯”、“1967-01-01”、“琼斯”);
人员列表。添加(人员);
Person pers=新人(“约翰”、“琼斯”、“1967-01-01”、“琼斯”);
人员列表。添加(人员);
人员名单的结果应为:

“黛安”、“琼斯”、“1967-01-01”、“重复”
“黛安”、“琼斯”、“1967-01-01”、“重复”
“约翰”,“琼斯”,“1967-01-01”,“独一无二”

对此,我们将不胜感激

var theLookup = personList
  .GroupBy(p => new {p.PersonFirstName, p.PersonLastName, p.PersonDateOfBirth})
  .ToLookup(g => g.Skip(1).Any() ? "duplicate" : "unique");

foreach(var lookupEntry in theLookup)
{
  string stateOfData = lookupEntry.Key;
  foreach(Person p in lookupEntry.SelectMany(g => g))
  {
    p.StateOfData = stateOfData;
  }
}

也许这篇文章可以帮助你?转到“使用分组和聚合函数选择”一章。

这是C代码吗?你不能把它写下来,这样它至少可以编译吗?这将使我们的生活更轻松。很抱歉,我在记事本中输入了代码,因为家里没有开发环境——我认为代码足够简单,可以修复不可编译的问题。顺便说一下,谢谢你的回答。将在周一的工作中使用。谢谢@davidB这非常有效。非常感谢您的帮助。
var theLookup = personList
  .GroupBy(p => new {p.PersonFirstName, p.PersonLastName, p.PersonDateOfBirth})
  .ToLookup(g => g.Skip(1).Any() ? "duplicate" : "unique");

foreach(var lookupEntry in theLookup)
{
  string stateOfData = lookupEntry.Key;
  foreach(Person p in lookupEntry.SelectMany(g => g))
  {
    p.StateOfData = stateOfData;
  }
}