使用LINQ从列表中创建具有相同属性的对象的子列表

时间:2016-03-14 20:15:46

标签: c# linq

我有一个人看起来像:

Article.find_by(title: params[:search])

我有一个方法:

public class Person {
    public string name;
    public int age;
}

子列表中的每个项目具有相同的年龄。

所以内容看起来像是:

public List<List<Person>> createPairedList(List<Person> plist){
    List<List<Person>> newList = new List<List<Person>>();

    foreach (Person person in plist)
    {
       bool breaking = false;
       for (int i = 0; i<newList.Count(); i++)
       {
           foreach (Person p in newList[i])
           {
               if (p.age == person.age)
               {
                    newList[i].Add(person);
                    breaking = true;
                    break;
                }
            }
            if (breaking){break;}
        }
        if (!breaking)
        {
            newList.Add(new List<Person>(){person});
        }
    }
    return newList;
}

然后在这个方法之后它会像:

[{name="bob", age="20"},
{name="billy", age="21"},
{name="bobby", age="20"},
{name="john", age="21"},
{name="george", age="22"}]

有没有办法使用LINQ表达式?

1 个答案:

答案 0 :(得分:1)

var newList = list.GroupBy(p => p.age).Select(p => p.ToList()).ToList();

将返回按List<List<Person>>

分组的age