2011-02-05 4 views
3

LinQの使用リストを照会して重複する人を見つけたい(重複は として同じ生年月日)重複した人物の StateOfDataプロパティに文字列 "duplicate"とそれぞれの固有のStateOfDataプロパティに文字列 "unique"を付けてマークします。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

+0

申し訳ありませんが、私は自宅で開発環境を持っていないので、メモ帳にコードを入力しました。コードはコンパイルできない場合に修正するのに十分なほど単純だと思いました。途中であなたの答えをありがとう。月曜日の仕事で使用します。 – Paul

答えて

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; 
    } 
} 
+0

ありがとう@davidBこれは本当にうまく動作します。これであなたの助けに感謝します。 – Paul

関連する問題