如何对C#类对象值进行分组。 LINQ有可能吗?

时间:2019-10-24 00:41:09

标签: c# linq

我一直在尝试对对象字段进行分组,但似乎无法正常工作。

这是类对象

  public class Inventory
    {
        public string warehouse_id { get; set; }
        public string product_id { get; set; }
        public int quantity { get; set; }
    }


     public List<Inventory> inventories { get; set; }

数据通过JSON这样从API调用中传入:

{
"inventories": [{
    "warehouse_id": "warehouse1",
    "product_id": "productA",
    "quantity": 5400
}, {
    "warehouse_id": "warehouse2",
    "product_id": "productA",
    "quantity": 571
}, {
    "warehouse_id": "warehouse3",
    "product_id": "productA",
    "quantity": 0
}, {
    "warehouse_id": "warehouse1",
    "product_id": "prod_B",
    "quantity": 0
}, {
    "warehouse_id": "warehouse2",
    "product_id": "prod_B",
    "quantity": 0
}, {
    "warehouse_id": "warehouse3",
    "product_id": "prod_B",
    "quantity": 1
}, 

] }

反序列化对象没有问题。

Request request = new Request("api/path/to/get/inventory/data", Method.GET);
var r= request.Execute<InventoryReport>();

现在我有一个填充的InventoryReport对象。

我需要忽略Warehouse_id值,并按产品分组数量数据。
例如"inventories": [{ "warehouse_id":"any value here", "product_id": "productA", "quantity": 5571 // Here we have grouped the total quantity by product },

问题分为两个部分。 LINQ是否可能获得此结果?我尝试了此操作,但它不起作用(我在想,因为Warehouse_ids可变。)

 var groupedInventory = from newObject1 in r.inventories
            group arrayObject1 by new { newObject1.quantity, newObject1.product_id }
            into g
            select new { KKey = g.Key, Obj = g };

如果不可能的话,最好的方法是什么。我只是不明白,所以任何指导都将对您有所帮助。

1 个答案:

答案 0 :(得分:4)

尝试一下

var groupedInventory = from obj in r.inventories
                       group obj by obj.product_id into g
                       select new Inventory() { product_id = g.Key, quantity = g.Sum(e => e.quantity) };

我认为这很不言自明。如有疑问,请发表评论。