按特定属性的每个值拆分多个列表中的列表

时间:2015-11-10 12:21:41

标签: c# linq list

我有一个数据结构列表,其中包含一个名为group的属性。 现在,我想根据group - 值在多个列表中拆分此列表。 例如,我在原始列表中有5个对象,其中包含以下group - 值:

0. group: "group1"
1. group: "group1"
2. group: "group2"
3. group: "group2"
4. group: "group3"

记住这个列表我希望每个group - 值中有3个列表。一个列表只包含具有组“group1”的对象,下一个具有“group2”等等...

我想我可以用Linq做到这一点(我可以这样做以从具有给定值的组中获取单个列表)但我无法弄清楚如何使用所有可能的组自动执行此操作。

3 个答案:

答案 0 :(得分:3)

假设您在同一个集合中有多个类型,我认为您应该引入一个接口(名称可以讨论;)

public interface IHaveGroup 
{
    string Group { get; }
}

然后,你可以使用LINQ。

IEnumerable<IHaveGroup> items = // get all items as a single group
var groups = items.GroupBy(x => x.Group);

答案 1 :(得分:2)

GroupBy可以满足您的需求。但是如果你想在每个组包含一个列表的列表中得到结果,你应该像这样使用它:

IList<List<Item>> groups = items.GroupBy(x => x.Group).Select(x => x.ToList()).ToList();

答案 2 :(得分:0)

您可以使用Linq的group be功能。我添加一个样本,输出将是。

  • 组group1有2个元素
  • 组group2有2个元素
  • 组group3有1个元素

    List<GroupTemp> list = new List<GroupTemp>();
    list.Add(new GroupTemp("group1", "1"));
    list.Add(new GroupTemp("group1", "2"));
    list.Add(new GroupTemp("group2", "3"));
    list.Add(new GroupTemp("group2", "4"));
    list.Add(new GroupTemp("group3", "5"));
    
    var groupedList = list.GroupBy(t => t.key).ToList();
    
    foreach (var entity in groupedList)
    {
        Console.WriteLine(String.Format("Group {0} has {1} elements", entity.Key, entity.Count()));
    }