繁体   English   中英

如何对 C# class object 值进行分组。 LINQ 可以做到这一点吗?

[英]How to group C# class object values. Is this possible with LINQ?

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

这是 class object

  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; }

数据通过 API 调用中的 JSON 传入,如下所示:

{
"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
}, 

] }

反序列化 object 没有问题。

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

现在我有一个填充的 InventoryReport object。

我需要的是忽略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 };

如果不可能,解决此问题的最佳方法是什么。 我只是不明白,所以任何指导都会有所帮助。

尝试这个

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) };

我认为这是不言自明的。 如果您有任何疑问,请发表评论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM