Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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# LINQ:分组集合_C#_Linq - Fatal编程技术网

C# LINQ:分组集合

C# LINQ:分组集合,c#,linq,C#,Linq,我正在为《太空入侵者》编程练习;-)虽然效果很好,但我对入侵者还击有意见 所有入侵者都存储在一个列表中,我使用linq将这些入侵者按其X位置分组,这样我就可以随机访问一个组,并将该列底部的入侵者击退 var r = from invader in invaders group invader by invader.Location.X into invaderGroup orderby invaderGroup descending

我正在为《太空入侵者》编程练习;-)虽然效果很好,但我对入侵者还击有意见

所有入侵者都存储在一个列表中,我使用linq将这些入侵者按其X位置分组,这样我就可以随机访问一个组,并将该列底部的入侵者击退

var r = from invader in invaders
                group invader by invader.Location.X into invaderGroup
                orderby invaderGroup descending
                select invaderGroup.Take(random.Next(0, invaderGroup.Count()));
但是无论我尝试什么(例如,选择new{investargroup.Key,investrgroup};),我的结果总是null


有人能给我一些帮助/提示吗?谢谢

我发现您的查询有两个问题;您正在对组进行排序,而不是对入侵者进行排序,并且您正在使用带有一个可以为零的随机数的
Take
,以便返回一个空结果

这适用于按X坐标对入侵者进行分组,按Y坐标对入侵者进行排序,随机选取一组入侵者,并获得Y坐标最高的入侵者:

var r =
    from invader in invaders
    orderby invader.Location.Y descending
    group invader by invader.Location.X into invaderGroup
    select invaderGroup;

Invader fire = r.Skip(random.Next(r.Count())).First().First();