如何获取每个项目2和项目3组合的最大日期时间?



我在这样的元组中有来自外部系统的数据,有很多日期时间不同的项目2和项目3组合。

var data = new List<Tuple<DateTime, string, string>>
{
new Tuple<DateTime, string, string>(new DateTime(2021, 04, 01, 5, 10, 20), "A1", "X1"),
new Tuple<DateTime, string, string>(new DateTime(2021, 04, 01, 6, 10, 22), "A1", "X1"),
new Tuple<DateTime, string, string>(new DateTime(2021, 04, 02, 7, 11, 21), "A2", "X2")
};

现在我需要针对每个唯一的项目获取MAX日期时间2&项目3组合和返回结果应该是这个,

var result = new List<Tuple<DateTime, string, string>>
{
new Tuple<DateTime, string, string>(new DateTime(2021, 04, 01, 6, 10, 22), "A1", "X1"),
new Tuple<DateTime, string, string>(new DateTime(2021, 04, 02, 7, 11, 21), "A2", "X2")
};

我能够为每个项目2和项目3的组合获取最大日期时间,我将这些值作为硬代码传递

var maxTimestamp = data.Where(t => t.Item2 == "A1" && t.Item3 == "X1").Max(t => t.Item1);

但我需要迭代每个item2和item3的组合,如何做到这一点?

使用GroupBy:

var maxTimestamps = data.GroupBy(x => new { x.Item2, x.Item3}).
Select(x => x.OrderByDescending(y => y.Item1).First());

您将得到具有相同Item2Item3的组。按日期对这些组进行排序,并选择每个组的第一个日期。

最新更新