gpt4 book ai didi

c# - 如何通过 linq 查询对组中的元素进行排序,然后选择第一个?

转载 作者:太空狗 更新时间:2023-10-30 00:10:00 24 4
gpt4 key购买 nike

我有一组数据,其中包含类型、日期和值。

我想按类型分组,对于每组中的每组值,我想选择具有最新日期的值。

这是一些有效的代码并给出了正确的结果,但我想在一个 linq 查询中而不是在迭代中完成这一切。我有什么想法可以通过纯 linq 查询获得与此相同的结果...?

var mydata = new List<Item> {
new Item { Type = "A", Date = DateTime.Parse("2016/08/11"), Value = 1 },
new Item { Type = "A", Date = DateTime.Parse("2016/08/12"), Value = 2 },
new Item { Type = "B", Date = DateTime.Parse("2016/08/20"), Value = 3 },
new Item { Type = "A", Date = DateTime.Parse("2016/08/09"), Value = 4 },
new Item { Type = "A", Date = DateTime.Parse("2016/08/08"), Value = 5 },
new Item { Type = "C", Date = DateTime.Parse("2016/08/17"), Value = 6 },
new Item { Type = "B", Date = DateTime.Parse("2016/08/30"), Value = 7 },
new Item { Type = "B", Date = DateTime.Parse("2016/08/18"), Value = 8 },
};

var data = mydata.GroupBy(_ => _.Type);

foreach (var thing in data) {

#region

// How can I remove this section and make it part of the group by query above... ?
var subset = thing.OrderByDescending(_ => _.Date);
var top = subset.First();

#endregion

Console.WriteLine($"{thing.Key} {top.Date.ToString("yyyy-MM-dd")} {top.Value}");
}

Item 定义为:

public class Item {     
public string Type {get;set;}
public DateTime Date {get;set;}
public int Value {get;set;}
}

预期输出:

A 2016-08-12 2
B 2016-08-30 7
C 2016-08-17 6

最佳答案

使用 select 获取按降序排列的 FirstOrDefault(或 First - 因为分组你不会得到 null):

var data = mydata.GroupBy(item => item.Type)
.Select(group => group.OrderByDescending(x => x.Date)
.FirstOrDefault())
.ToList();

或者 SelectManyTake(1)

var data = mydata.GroupBy(item => item.Type)
.SelectMany(group => group.OrderByDescending(x => x.Date)
.Take(1))
.ToList();

关于c# - 如何通过 linq 查询对组中的元素进行排序,然后选择第一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38898907/

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