Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从列表中的列表检索不同值的列表_C#_Linq_Distinct - Fatal编程技术网

C# 如何从列表中的列表检索不同值的列表

C# 如何从列表中的列表检索不同值的列表,c#,linq,distinct,C#,Linq,Distinct,我有一个对象列表,每个对象中都包含一个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&

我有一个对象列表,每个对象中都包含一个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{get;set;}
公职人员()
{
Ids=新列表();
}
}
var rnd=新随机数();
var container=新列表();
//添加具有随机ID的成员
对于(int i=1;i
当然还有method-y语法,在本例中使用
SelectMany

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

但是我不记得如何调用它,所以我通常更喜欢从
s中调用多个

只是一个提示,您实际上只是创建了9个成员和4个ID。这与您的问题无关:)有效:)我更改了演示代码您可能会在
循环中获得重复的值,用于分配随机ID。在紧循环中调用
rnd.Next()
可能会导致重复(不确定您是否同意,但我想我会指出)。@bryancrossby“在紧循环中调用rnd.Next()可能会导致重复”-不确定您在这里指的是什么。当然,
.Next(int)
可能会在两次连续调用中返回相同的内容(如果可以保证某个特定值不会出现,则不能说它是随机的),但循环的紧密性与此无关?您还可以传入一个IEqualityComparer对象,以决定如何将该类型称为distinct。。。虽然使用整数/字符串,但其默认值已经足够好了。
var distinctIds = container.SelectMany(member => member.Ids).Distinct();