C#では、3つのStringメンバ変数を持つNoteというクラスがあるとします。
public class Note
{
public string Title;
public string Author;
public string Text;
}
そして、Note型のリストを持っています。
List<Note> Notes = new List<Note>();
Author列のすべての異なる値のリストを取得する最もきれいな方法は何でしょうか?
リストを反復処理して、重複していないすべての値を別の文字列リストに追加することはできますが、これは汚くて非効率的なようです。 何か1行でできる魔法のLinq構文があるような気がしますが、思いつきませんでした。
Jon SkeetはDistinctBy()
演算子を持つmorelinqというライブラリを書きました。実装についてはhereを参照してください。あなたのコードは次のようになります。
IEnumerable<Note> distinctNotes = Notes.DistinctBy(note => note.Author);
**更新情報:*********。 あなたの質問を読み直してみると、もしあなたが単にAuthorの明確なセットを探しているのであれば、Kirkは正しい答えを持っています。
サンプルを追加し、DistinctByにいくつかのフィールドを追加しました。
res = res.DistinctBy(i => i.Name).DistinctBy(i => i.ProductId).ToList();
mcilist = (from mci in mcilist select mci).Distinct().ToList();