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)
                                   });