4

我有一个自定义数据类型,其中包含List<string>.

我希望ListCustomDataType那个嵌套的List<string>.

我试过以下

 compoundSchedules.GroupBy(a => a.Timepoints);

whereTimepoints是表示为字符串的日期列表。如果任何CustomDataTypes 具有相同的时间点,我希望将它们组合在一起。使用上面的代码,它不会对它们进行分组,而是将其时间点列表重复List为.CustomDataTypeIGrouping Key

谢谢。

4

4 回答 4

2

您应该创建一个IEqualityComparer<List<string>>检查列表是否具有相同的长度和内容,并使用以下重载Enumerable.GroupBy

compoundSchedules.GroupBy(a => a.Timepoints, myComparer);

要么,要么创建您自己的类作为时间点列表,并让它实现GetHashCodeEquals(和/或实现IEquatable<T>),默认比较器使用它们。

于 2012-07-09T15:51:41.217 回答
2

我想到了两件事。首先是创建一个 Timepoints 类并实现 IComparable。然后你可以比较每个列表的每个元素,看看它们是否相等。或者,您可以在复合计划中创建一个新属性,其中包含列表的哈希码。

于 2012-07-09T15:37:32.690 回答
1

既然TimepointsList<string>- 我将构建一个聚合字符串并按此分组。您可以使用 Aggregate 方法完成此操作

compoundSchedules.GroupBy(a => a.Timepoints.Aggregate( (x,y) => x + y));
于 2012-07-09T15:35:25.757 回答
0

您可以按连接的字符串列表进行分组:

var grouped = compoundSchedules.GroupBy(cs => string.Join("", cs.Timepoints));

这也将处理相同的订单(如果需要)。

于 2012-07-09T15:47:46.057 回答