我想根据两个属性的值将我的自定义对象数组分成几个数组。结构看起来像这样:
struct MyStruct {
public string Person {
get;
set;
}
public string Command {
get;
set;
}
}
现在,如果我有一个包含几个对象的数组:
{Person1, cmd1}
{Person1, cmd3}
{Person2, cmd3}
{Person3, cmd2}
{Person2, cmd4}
我希望能够为每个人将它们放入一个数组中,列出该人的所有命令:
{Person1: cmd1, cmd3}
{Person2: cmd3, cmd4}
{Person3: cmd2}
我希望我已经用我的描述说清楚了。我认为有一种优雅的方法可以用LINQ做到这一点,但我不知道从哪里开始。
答案 0 :(得分:2)
IEnumerable<MyStruct> sequence = ...
var query = sequence.GroupBy(s => s.Person)
.Select(g => new
{
Person = g.Key,
Commands = g.Select(s => s.Command).ToArray()
})
.ToArray();
查询语法中的类似查询:
var query = from s in sequence
group s.Command by s.Person into g
select new { Person = g.Key, Commands = g.ToArray() };
var queryArray = query.ToArray();
请注意,您要求提供一个数组数组,但这里的结果是一个匿名类型的数组,其中一个成员是一个字符串数组。
答案 1 :(得分:0)
我发现这是最简单的方法:
yourCollection.ToLookup(i => i.Person);