C# 使用linq或lambda表达式进行对象分组
我有一个要转换为另一个对象列表的对象列表 第一个对象如下所示:C# 使用linq或lambda表达式进行对象分组,c#,.net,linq,C#,.net,Linq,我有一个要转换为另一个对象列表的对象列表 第一个对象如下所示: private class ObjectOne { public string Name { get; set; } public string Item{ get; set; } } 还有一个像这样的 public class ObjectTwo { public string Name { get; set; } public IEnumerable<
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; }
}
将生成以下两个对象列表:
"Name One", {"Item One", "Item Two"}
"Name Two", {"Item Three"}
您可以使用
group by
LINQ操作符来实现这一点:
var obj2List =
from o in list
group o by o.Name into g
select new ObjectTwo() {Name = g.Key, Items = g.Select(x => x.Item)};
使用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)
});
var oneList=新列表
{
新对象一{Name=“Name One”,Item=“Item One”},
新对象一{Name=“Name One”,Item=“Item Two”},
新对象一{Name=“Name Two”,Item=“Item Three”}
};
var twolest=oneList.GroupBy(x=>x.Name)
.选择(x=>newobjecttwo
{
Name=x.Key,
Items=x.Select(t=>t.Item)
});
+1表示不使用查询理解语法。如果您只写“n=>”而不是“one=>”,则会是+2:)
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)
});