このタイプのモデルのリストがあります。
public class TourDude {
public int Id { get; set; }
public string Name { get; set; }
}
そして、ここに私のリストがあります:
public IEnumerable<TourDude> GetAllGuides {
get {
List<TourDude> guides = new List<TourDude>();
guides.Add(new TourDude() { Name = "Dave Et", Id = 1 });
guides.Add(new TourDude() { Name = "Dave Eton", Id = 1 });
guides.Add(new TourDude() { Name = "Dave EtZ5", Id = 1 });
guides.Add(new TourDude() { Name = "Danial Maze A", Id = 2 });
guides.Add(new TourDude() { Name = "Danial Maze B", Id = 2 });
guides.Add(new TourDude() { Name = "Danial", Id = 3 });
return guides;
}
}
これらのレコードを取得したい:
{ Name = "Dave Et", Id = 1 }
{ Name = "Danial Maze", Id = 2 }
{ Name = "Danial", Id = 3 }
目標は、主に重複および重複に近いもの (ID で確認可能) を折りたたむことであり、(比較時に) 可能な限り短い値を名前として使用します。
どこから始めればよいですか?私のためにこれを行う完全なLINQはありますか?等値比較子をコーディングする必要がありますか?
編集1:
var result = from x in GetAllGuides
group x.Name by x.Id into g
select new TourDude {
Test = Exts.LongestCommonPrefix(g),
Id = g.Key,
};
IEnumerable<IEnumerable<char>> test = result.First().Test;
string str = test.First().ToString();