2012-04-03 41 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 = ?????; 

我挣扎什么是的LINQ检索标识的所有成员名单不同。

+0

只是一个提示,你实际上只是创建9个成员和4个ID。这不是问题的提问:) – Alex 2012-04-03 14:17:08

+0

有效:)我已经改变了我的演示代码 – 2012-04-03 14:45:49

+0

你可以在你'for'循环分配随机IDS得到重复的值。在紧密循环中调用'rnd.Next()'可能会导致重复(不确定是否可以,但我想我会指出它)。 – 2012-04-03 14:48:18

回答

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

当然还有一个方法-Y语法,在这种情况下将使用SelectMany

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

,但我永远记得怎么称呼它,所以我一般喜欢多from秒。

+0

您还可以传入一个IEqualityComparer对象来决定如何将该类型称为独立的...虽然使用整数/字符串,但它的默认值足够好。 – 2012-04-03 15:14:16