linq 对象分组

扫码查看

我让人们反对,人们拥有使他们属于不同群体的属性(property)群体。
我想得到 List 并将它放在一个对象 GrouppedPeople 中,其中会有 List coll。一个 coll 元素只包含属于同一组的人。

所以如果我有 3 个人:

List<People>(){new People{Name="Test", Group = "Group1"},
               new People{Name="SameGroup", Group = "Group1"},
               new People{Name="Other", Group = "OtherGroup"}}

我需要收集 2 个 GrouppedPeople。第一个将包含 Test 和 SameGroup,第二个将包含其他(按 Group 属性分组)。我正在尝试使用 linq 来做到这一点。

我需要结果为 List 类型。 GrouppedPeople 是一个类,它只有一个 List 类型的属性,并且所有的人都来自同一组。

我想出了这样的事情:
from oneGroup in mates
                   group oneGroup by oneGroup.pGroupName into g
                   select g;

它工作正常,但结果对象不是强类型的。我喜欢 List 作为结果。有没有办法从匿名对象类型中获取它?有没有其他方法可以用 linq 实现这一切并保持强类型?

最佳答案

这将返回匿名类型对象的列表:

var result = (from oneGroup in mates
                   group oneGroup by oneGroup.pGroupName into g
                   select g).ToList();

但是如果你想返回特定类型的对象,你应该创建具有所需属性的新类:
public class MateGroup
{
 public string Name {get;set;}
}

var result = (from oneGroup in mates
                   group oneGroup by oneGroup.pGroupName into g
                   select new MateGroup(){ Name =  g.<field_name>}).ToList();

更新:

根据您的评论,请尝试以下操作:
var result = (from oneGroup in mates
                   group oneGroup by oneGroup.pGroupName into g
                   select new GrouppedPeople(){ People =  g.ToList()}).ToList();

关于linq 对象分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5949295/

10-12 00:42
查看更多