2011-02-05 67 views
3

使用LinQ我想查询列表并找到重复的人(重复的定义为 具有相同的姓,名和出生日期),并用字符串“duplicate”标记每个重复人物的 StateOfData属性,并用字符串“unique”标记每个唯一人员的StateOfData属性。使用Linq按列表中的多列进行分组并标记所有重复的项目

public Class Person 
{ 
public string PersonFirstName { get; set; } 
public string PersonLastName { get; set; } 
public datetime PersonDateOfBirth { get; set; } 
public string StateOfData{ get; set } 

public Person (string firstName, string lastName, dateTime dateOfBirth,string state) 
{ 
    this.PersonFirstName = firstName; 
    this.PersonLastName = lastName; 
    this.PersonDateOfBirth = dateOfBirth; 
    this.StateOfData = state; 
} 


} 


IList<Person> personsList = new List<Person>(); 
Person pers = new Person("Diane","Jones","1967-01-01",""); 
personsList.add(pers); 
Person pers = new Person("Diane","Jones","1967-01-01",""); 
personsList.add(pers); 
Person pers = new Person("John","Jones","1967-01-01",""); 
personsList.add(pers); 

的人员名单的结果应改为:

“戴安娜”, “奇兵”, “1967年1月1日”, “重复”
“戴安娜”, “奇兵”,“1967年-01-01" , “重复”
“约翰”, “奇兵”, “1967年1月1日”, “独一无二”

任何帮助,将不胜感激

+0

是C#代码吗?你不能写它,所以它至少可以编译?它会让我们的生活更轻松。 – Snowbear 2011-02-05 19:19:31

+0

对不起,我把代码输入到记事本中,因为在家里没有开发环境 - 认为代码很简单,足以修复,如果不可编译。谢谢你的回答。周一将在工作中使用。 – Paul 2011-02-06 14:32:31

回答

6
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; 
    } 
} 
相关问题