我一直在尝试对对象字段进行分组,但似乎无法正常工作。
这是类对象
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 };
如果不可能的话,最好的方法是什么。我只是不明白,所以任何指导都将对您有所帮助。
答案 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) };
我认为这很不言自明。如有疑问,请发表评论。