我正在尝试对列表的某些列表对象执行Linq GroupBy。
public class ItemDto
{
public int ItemId { get; set; }
public string ProductName { get; set; }
public int Count { get; set; }
public List<CondimentDto> Condiments { get; set; }
}
public class CondimentDto
{
public CondimentDto(int ItemId, string productName, decimal originalPrice)
{
ItemId = ItemId;
ProductName = productName;
OriginalPrice = originalPrice;
}
public int PosItemId { get; set; }
public string ProductName { get; set; }
public decimal OriginalPrice { get; set; }
}
Here is list example.
var items = new List<ItemDto>();
items.Add(new ItemDto(){ItemId = 1, ProductName = "Steak", Condiments = new List<CondimentDto>{new CondimentDto(11, "Mayonez", 1)}});
items.Add(new ItemDto() { ItemId = 1, ProductName = "Steak", Condiments = new List<CondimentDto> { new CondimentDto(11, "Mayonez", 1) } });
items.Add(new ItemDto() { ItemId = 1, ProductName = "Steak", Condiments = new List<CondimentDto> { new CondimentDto(11, "Hardal", 1) } });
Here is my LinQ Query;
var result = items.GroupBy(item => new {item.ItemId, item.Condiments})
.Select(x=>new ItemDto
{
ItemId = x.Key,
ProductName = x.First().ProductName,
Condiments = x.First().Condiments,
Count = x.Count()
})
.ToList();
我想做的是,我想按ItemId和调味品列表对列表进行分组。我期望的结果是
{
items[
{
"ItemId": 1,
"ProductName": "Steak",
"Condiments": [
{
"ItemId": 11,
"Name": "Mayonez",
"Price": 1
}
],
"Count": 2
},
{
"ItemId": 1,
"ProductName": "Steak",
"Condiments": [
{
"ItemId": 11,
"Name": "Hardal",
"Price": 1
}
],
"Count": 1
}
]
}
因此,有两个相同的列表项,因此必须将其分组并且计数为2。而调味品的另一个不同项是Hardal。它是单独的,计数为1。
列表对象是否可能有两个组?顺便说一句,调味品可以为null。
谢谢
也许您可以与ItemId
和ProductName
分组:
var result = items
.GroupBy(item => new { item.ItemId, item.Condiments?.FirstOrDefault()?.ProductName })
.Select(x => new ItemDto
{
ItemId = x.Key.ItemId,
ProductName = x.Key.ProductName,
Condiments = x.FirstOrDefault()?.Condiments,
Count = x.Count()
})
.ToList();