是否可以按内部属性值进行分组?如果不使用Linq创建新对象,我该怎么做呢?或者我需要在分组过程之前创建匿名对象。
public class Item
{
public int Id { get; set; }
public List<ItemInv> Inventory {get; set;}
}
public class ItemInv
{
public int wid {get; set;}
}
var lst = new List<Item> {
new Item {
Id=1,
Inventory= new List<ItemInv> { new ItemInv() { wid = 2 } }
},
new Item {
Id=2,
Inventory= new List<ItemInv> { new ItemInv() { wid = 2 }}
}
};
我需要通过 wid 属性对此第一个变量进行分组。
答案 0 :(得分:0)
要将Item
的{{1}}与其馆藏分组,首先展平嵌套馆藏,然后按ItemInv
分组:
ItemInv
进行测试:
var result = (from item in list
from inv in item.Inventory
group item by inv.wid into invGrouping
select new {
ItemInv = invGrouping.Key,
Items = invGrouping.ToList()
}).ToList();
查看当前的分组是// Testing data
var list = new List<Item> {
new Item {
Id=1,
Inventory= new List<ItemInv> { new ItemInv() { wid = 2 } }
},
new Item {
Id=2,
Inventory= new List<ItemInv> {
new ItemInv() { wid = 2 },
new ItemInv() { wid = 3 } }
},
new Item {
Id=3,
Inventory= new List<ItemInv> {
new ItemInv() { wid = 3 } }
} };
//Output:
// wid 2 - Item id=1, Item id = 2
// wid 3 - Item id=2, Item id = 3
。如果您希望按inv.wid
个实例进行分组,则必须先覆盖ItemInv
和Equals
。
答案 1 :(得分:0)
我认为我有与Gilad Green几乎相同的解决方案,但是在方法语法方面。
var itemsByWid = lst
.SelectMany(item => item.Inventory.Select(itemInv => Tuple.Create(itemInv, item)))
.GroupBy(itemTuple => itemTuple.Item1.wid, itemTuple => itemTuple.Item2);