gpt4 book ai didi

c# - LINQ:将多个属性的对象列表分组到列表列表中的更好方法?

转载 作者:行者123 更新时间:2023-11-30 20:04:20 27 4
gpt4 key购买 nike

我有一个这样的对象列表:

var cmps = new List<Campaign>()
{
new Campaign(){ PersonId = 1, Id = 1, Name = "Name"},
new Campaign(){ PersonId = 2, Id = 1, Name = "Name"},
new Campaign(){ PersonId = 3, Id = 1, Name = "Name1"},
new Campaign(){ PersonId = 4, Id = 2, Name = "Name1"},
new Campaign(){ PersonId = 5, Id = 2, Name = "Name1"},
new Campaign(){ PersonId = 6, Id = 3, Name = "Name"},
};

我想通过多个属性将它们分组到一个列表列表中,在这个例子中是通过 IdName

这会将原始列表拆分为以下内容(其中数字表示 PersonId):

{[1, 2], [3], [4, 5], [6]}

我已经通过编写以下代码解决了这个问题:

List<List<Campaign>> groups = cmps.GroupBy(c => new { c.Id, c.Name })
.Select(c => c.Key)
.ToList()
.Select(v => cmps.Where(c => c.Id == v.Id && c.Name == v.Name).ToList())
.ToList();

这个解决方案似乎工作正常,但出于好奇,是否有更好/更好的方法来做到这一点?

最佳答案

只是做:

List<List<Campaign>> groups = cmps.GroupBy(c => new { c.Id, c.Name })
.Select(group => group.ToList())
.ToList();

IEnumerable 上的 GroupBy 返回 IEnumerable<IGrouping<TKey, T>> . IGrouping<TKey, T>工具 IEnumerable<T> , 因此您可以直接将组用作序列。

关于c# - LINQ:将多个属性的对象列表分组到列表列表中的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13106052/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com