2012-04-03 18 views
2

私はオブジェクトのリストを持っていて、各オブジェクトにはIDのリストが入っています。リスト内のリストから別の値のリストを取得する方法

以下のコードは、10人のメンバーのリストを作成し、各メンバーに5つのランダムIDのリストを作成します。私は苦労してる何

public class Member 
{ 
    List<int> Ids { get; set; } 

    public Member() 
    { 
     Ids = new List<int>(); 
    } 
} 

var rnd = new Random(); 
var container = new List<Member>(); 

// Add members with random Ids 
for (int i = 1; i <= 10; i++){ 
    var member = new Member(); 

    for (int j = 1; j <= 5; j++){ 
     member.Ids.Add(rnd.Next(100)); 
    } 
} 

var distinctIds = ?????; 

は、すべてのメンバーのIDの明確なリストを取得するためにLINQです。もちろんあり

+0

ちょうどヒントですが、実際には9人のメンバーと4人のIDを作成しています。それはあなたの質問のために重要ではありません:) – Alex

+0

有効:私はデモコードを変更しました –

+0

あなたの 'for'ループにランダムなIDを割り当てる重複した値が得られるかもしれません。タイトなループで 'rnd.Next()'を呼び出すと、重複が発生する可能性があります(あなたには分かりませんが、私はそれを指摘すると思います)。 –

答えて

1
var distinctIds = 
    (from member in container 
    from id in member.Ids 
    select id).Distinct(); 

SelectManyを使用することになり、このときの手法-yの構文、:

var distinctIds = container.SelectMany(member => member.Ids).Distinct(); 

が、私はそれを呼び出すので、私は一般的に複数のfromを好む方法を覚えていることはありませんs。

+0

また、IEqualityComparerオブジェクトを渡して、その型をdistinct ...とする方法を決めることもできますが、整数/文字列ではデフォルトは十分です。 –

関連する問題