如何从现有列表中创建一个新列表,该列表中的元素在Linq to对象中包含相同的id
本文关键字:列表 Linq 元素 to id 包含相 对象 一个 创建 新列表 | 更新日期: 2023-09-27 18:24:17
我有一个列表:
var list = new List<Test>{
new Test = {
ID = 1,
Name = "Test 1",
RefId = 1
RefName = "Test RefName 1"
},
new Test = {
ID = 2,
Name = "Test 2",
RefId = 1
RefName = "Test RefName 1"
},
new Test = {
ID = 3,
Name = "Test 3",
RefId = 2
RefName = "Test RefName 2"
},
new Test = {
ID = 4,
Name = "Test 4",
RefId = 2
RefName = "Test RefName 2"
}
};
我想将顶部列表转换为新列表:
var list = new List<TestNew>{
new TestNew = {
RefId = 1,
RefName = "Test RefName 1",
ListGroup = new List<Group>{
new Group{
ID = 1,
Name = "Test 1"
},
new Group{
ID = 2,
Name = "Test 2"
},
}
},
new TestNew = {
RefId = 2,
RefName = "Test RefName 2",
ListGroup = new List<Group>{
new Group{
ID = 3,
Name = "Test 3"
},
new Group{
ID = 4,
Name = "Test 4"
},
}
}
};
list.GroupBy(x => new { x.RefId, x.RefName })
.Select(g => new TestNew() {
RefId = g.Key.RefId,
RefName = g.Key.RefName,
ListGroup = g.Select(y => new Group() {
ID = y.ID,
Name = y.Name
}).ToList()
}).ToList();
像这样的东西应该可以做到:
list.GroupBy(item => item.RefId)
.Select(grouping => new ListNew() {
RefId = grouping.Key,
RefName = grouping.First().RefName,
ListGroup = grouping.Select(i => new Group() { ID = i.ID, Name = i.Name }).ToList()
})
.ToList();
这确实假设RefName/RefId总是一致的。