根据对象的属性分隔对象组

时间:2011-01-07 23:48:11

标签: c# linq

我想根据两个属性的值将我的自定义对象数组分成几个数组。结构看起来像这样:

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做到这一点,但我不知道从哪里开始。

2 个答案:

答案 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();

请注意,您要求提供一个数组数组,但这里的结果是一个匿名类型的数组,其中一个成员是一个字符串数组。


另一方面,它通常是not recommended to create mutable structs

答案 1 :(得分:0)

我发现这是最简单的方法:

yourCollection.ToLookup(i => i.Person);