Linq查询从一个表创建3个对象。可能吗?

时间:2016-05-12 04:22:11

标签: c# linq

假设我们有一个这样的表:

id  client  order_number    item_ref    size    quantity
1   CL-0001 123456          ITEM-0001   small   20
2   CL-0001 123456          ITEM-0001   big     20
3   CL-0001 123456          ITEM-0002   small   20
4   CL-0001 123456          ITEM-0002   big     20
5   CL-0001 456789          ITEM-0001   small   10
6   CL-0001 456789          ITEM-0001   medium  10
7   CL-0001 456789          ITEM-0001   big     10
8   CL-0001 456789          ITEM-0002   small   10
9   CL-0001 456789          ITEM-0002   medium  10
10  CL-0001 456789          ITEM-0002   big     10

我想获取所有行,但这个唯一的表实际上是我代码中的3个对象。

包含包含项目的订单的对象客户端。

所以在我的代码中我有这个:

public class Client
{
    public string Reference { get; set; }
    public List<Order> Orders { get; set; }
}

public class Order
{
    public string Reference { get; set; }
    public List<Item> Items{ get; set; }
}

public class Item
{
    public string Reference { get; set; }
    public string Size { get; set; }
    public int Quantity { get; set; }
}

group by是否可以使用一个LinQ查询创建我的模型?

我问这个问题是因为我需要打印发票,并且根据项目的类型,有时我需要对所有尺寸进行分组并对数量求和,有时我需要显示每个数量的详细信息。

1 个答案:

答案 0 :(得分:1)

var list = source.GroupBy(x => x.client)
                .Select(x => new Client
                        {
                            Reference  = x.Key,
                            Orders = x.GroupBy(y => y.order_number)
                                        .Select(y => new Order
                                            {
                                                Reference  = y.Key,
                                                Items = y.Select(z => new Item
                                                                {
                                                                    Reference  = z.item_ref,
                                                                    Size = z.Size,
                                                                    Quantity = z.Quantity
                                                                }).ToList()
                                            }).ToList()
                        }).ToList();