【发布时间】:2017-11-18 08:17:12
【问题描述】:
我正在研究一些 LINQ GroupBy 逻辑,但我想不出如何优雅高效地让它工作。
基本上,我有一个 IEnumerable<Thing> 对象(顺序正确!),其中每个 Thing 对象都有一个 RootId 属性。我想将这些对象按我正在工作的 RootId 分组:
IEnumerable<Thing> things; // Already has value assigned
var groups =
(from thing in things
group thing by thing.RootId into thingGroup
select thingGroup.ToArray())
.ToList();
groups 的类型是 List<Thing[]>
现在问题来了!
上面的示例返回列表中的 5 个项目。但是,我如何将 2 个数组合并为 1 个,留下 4 个项目(再次,当然保持顺序)??
原因是因为其中 2 个项目具有不同的 RootId,但我希望它们被视为相同,即组合在一起。
我打算在 LINQ 语句之后连接和操作数组,但实际上它需要作为 group by/LINQ 的一部分来完成 - 有什么想法吗?
如果需要更多示例或信息,请告诉我。
谢谢!
合并标准将是一个手动过程,因此我正在考虑将其传递给 groupby 方法,如下所示:
var rootIdsToMerge = new List<Tuple<ID, ID>>
{
new Tuple<ID, ID>(rootIdOne, rootIdTwo),
new Tuple<ID, ID>(rootIdThree, rootIdFour)
};
因此,RootId 为 rootIdOne 的任何组项都将与 RootId 为 rootIdTwo 的组项合并,依此类推。
【问题讨论】:
-
那么对待 2 个 RootId 相同的标准是什么?例如硬编码值、其他属性还是?
-
这将是一个手动过程,所以我正在考虑将它传递给这样的方法:
var rootIdsToMerge = new List<Tuple<ID, ID>> { new Tuple<ID, ID>(rootIdOne, rootIdTwo), new Tuple<ID, ID>(rootIdThree, rootIdFour) }; -
像什么?如果没有更具体的例子,我看不出我们如何回答。所以我们有
IEnumerable<Thing>,还有什么? -
对不起,Ivan,我正在尽力提供帮助。我的新“rootIdsToMerge”代码有帮助吗?但是,是的,这两个对象就是我们所拥有的 - 我希望有一些很棒的 LINQ 查询来实现我所需要的:)