gpt4 book ai didi

c# - 在 LINQ 中表达组查询时遇到问题

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

我有两种类型:

public class TimedValue
{
public DateTime TimeStamp { get; set; }
public double Value { get; set; }
}

public class Stats
{
IList<TimedValue> Values { get; set; }
... // some other fields
}

Stats 的多个实例存储在一个 IEnumerable 集合对象中。我正在尝试提出一个 LINQ 查询,该查询将为我提供所有 Stats 实例的按时间顺序排列的总值。这意味着它将遍历每个 Stats 对象中的每个 TimedValue,如果它们的 TimeStamps 匹配,它将添加 Value 字段。所以最后我会得到一个按时间顺序(从旧到新)分组的 double 列表。

我在 LINQ 方面很弱,所以我在这方面失败了。我只做到了:

.Select(stat => stat.Values)

转换到:

List<List<Value>>

这是我需要的 Stats 对象的子集,但我不知道如何从中对我需要的总值进行分组。

示例(因为我的意思有些困惑):

假设我们有 2 个 stats 实例,我在这里简化符号,只是为了简化示例:

Stats1:值 = {{ "Monday", 1.1 }, {"Tuesday", 2.2}}
Stats2:值 = {{ "Monday", 1.1 },{"Tuesday", 2.2}, {"Friday", 3.3}}

结果应该是一个 double 列表:{2.2, 4.4, 3.3}

最佳答案

这应该给你一个包含总和的 double 列表:

statList.SelectMany(stat => stat.Values)
.GroupBy( x => x.TimeStamp)
.OrderBy( g => g.Key)
.Select( g => g.Sum(x => x.Value));
.ToList();

如果您不想要总和(问题中不是很清楚),这只会给您分组列表:

var timeStampGroups = statList.SelectMany(stat => stat.Values)
.GroupBy( x => x.TimeStamp)
.OrderBy( g => g.Key)
.ToList();

关于c# - 在 LINQ 中表达组查询时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7449314/

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