[英]Nested group with LINQ
我正在尝试使用LINQ对项目列表进行分组以在转发器中显示。 我有一个查询,几乎可以满足我的需求,但不完全是。
我的数据看起来像
Cart object
{ID: 10, isInventory: True, Pricing: 4},
{ID: 10, isInventory: True, Pricing: 20},
{ID: 10, isInventory: False, Pricing: 5},
{ID: 10, isInventory: False, Pricing: 23},
{ID: 74, isInventory: False, Pricing: 7}
我想按isInventory分组,然后按ID分组。 目前,我有一个查询接近但仍然不正确。
var grouped = from cart in shoppingCart.Cart
group cart by cart.IsInventoryStorage into Cart1
from CartGroup in
(from cart in Cart1
group cart by cart.BranchID)
group CartGroup by CartGroup.Key;
看起来好像已经正确分组了,但是isInventory上的Keys
,我理想地希望它是key.isInventory
然后按key.ID
对这些组中的每一个进行排序。
谢谢
这可以通过查询语法中的orderby
完成。 请注意,后续订购条件通过逗号分隔。
void Main()
{
var cart = new List<Cart>();
cart.Add(new Cart { ID = 10, isInventory = true, Pricing = 4 });
cart.Add(new Cart { ID = 10, isInventory = true, Pricing = 20});
cart.Add(new Cart { ID = 10, isInventory = false, Pricing = 5});
cart.Add(new Cart { ID = 10, isInventory = false, Pricing = 23});
cart.Add(new Cart { ID = 74, isInventory = false, Pricing = 7});
var grouped = from c in cart
orderby c.isInventory, c.ID
select c;
grouped.Dump();
}
public class Cart
{
public int ID { get; set; }
public bool isInventory { get; set; }
public int Pricing { get; set; }
}
这样输出数据:
10 False 5
74 False 7
10 False 23
10 True 4
10 True 20
var cart=new []{
new {ID= 10, isInventory= true, Pricing= 4},
new {ID= 10, isInventory= true, Pricing= 20},
new {ID= 10, isInventory= false, Pricing= 5},
new {ID= 10, isInventory= false, Pricing= 23},
new {ID= 74, isInventory= false, Pricing= 7}
};
var results=cart.GroupBy(c=>c.isInventory)
.SelectMany(grp1=>grp1.GroupBy(th=>th.ID),(grp1,grp2)=>new {grp1=grp1,grp2=grp2})
.GroupBy(temp0=>temp0.grp1.Key,temp0=>temp0.grp2)
.Dump();
结果:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.