LInQ - 对ID进行分组

时间:2014-08-25 17:29:11

标签: c# linq group-by

我有列表List<PersonDTO>PersonDTO定义如下:

PersonDTO
{
    public int PersonId;
    public int Name;
    public int OrderId;
    public string OrderName;
    public string OrderType;
}

有一个Person类,其中包含如下所述的订单列表

Person
{
    public int PersonId;
    public int Name;
    List<Orders> orders;
}

public Order
{
    public int OrderId;
    public string OrderName;
    public string OrderType;
}

我希望按PersonDTOPersonId列表进行分组,并生成Person个对象列表,以便该人的所有订单都在List<Orders>。< / p>

如何使用LINQ实现此目的。

非常感谢!

2 个答案:

答案 0 :(得分:1)

看起来这就是你想要的:

var people = personDTOs.GroupBy(i => i.PersonId).Select(
    // Each PersonId group projects a single Person object.
    i => new Person() {
        PersonId = i.Key,
        // Assuming that all names in this group are the same.
        Name = i.First().Name,
        // The elements in the group are used to project Order objects.
        orders = i.Select(o => new Order() {
            OrderId = o.OrderId,
            OrderName = o.OrderName,
            OrderType = o.OrderType
        }).ToList()
    }).ToList();

答案 1 :(得分:0)

你可以这样做:

List<PersonDTO> list = new List<PersonDTO>();
List<Person> personList = list.GroupBy(r => r.PersonId)
    .Select(grp => new Person()
    {
        PersonId = grp.Key,
        Name = grp.First().Name,
        orders = grp.Select(r => new Order()
        {
            OrderId = r.OrderId,
            OrderName = r.OrderName,
            OrderType = r.OrderType
        }).ToList()
    }).ToList();

但请记住,如果您的PersonOrder类是通过Entity框架或LINQ To SQL生成的,则无法在投影中使用它们。