我有一个对象列表,我想将其转换为另一个对象列表。
第一个对象看起来像这样:
private class ObjectOne
{
public string Name { get; set; }
public string Item{ get; set; }
}
还有一个像这样
public class ObjectTwo
{
public string Name { get; set; }
public IEnumerable<string> Items{ get; set; }
}
我想编写一个 linq 查询或 lambda 表达式,可以将 ObjectOne 数据列表转换为 ObjectTwo 数据列表。 ObjectTwo 列表中的每个项目都将包含一个与 ObjectOne 不同的名称以及与该名称关联的所有项目的枚举。
例如下面的ObjectOne数据列表
"Name One", "Item One"
"Name One", "Item Two"
"Name Two", "Item Three"
将产生以下 ObjectTwo 列表:
"Name One", {"Item One", "Item Two"}
"Name Two", {"Item Three"}
最佳答案
使用 GroupBy Linq 运算符。然后对于每个分组,选择键(您用来对其进行分组的键),并将每个组的项目转换为列表。
var oneList = new List<ObjectOne>
{
new ObjectOne {Name = "Name One", Item = "Item One"},
new ObjectOne {Name = "Name One", Item = "Item Two"},
new ObjectOne {Name = "Name Two", Item = "Item Three"}
};
var twoList= oneList.GroupBy(x => x.Name)
.Select (x => new ObjectTwo
{
Name = x.Key,
Items = x.Select(t => t.Item)
});
关于c# - 使用 linq 或 lambda 表达式进行对象分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9492506/