gpt4 book ai didi

linq - 按年份和月份对 Linq 结果进行排序

转载 作者:行者123 更新时间:2023-12-02 21:28:44 25 4
gpt4 key购买 nike

我正在使用 Linqpad 转储(显示)按年/月的计数列表。一切看起来都很好,但在我的一生中,我无法正确显示排序顺序。

var h = from x in myTable 
where x.Date >= DateTime.Parse("1/1/2013") && x.myField.EndsWith("abc")
group x by new
{
x.Date.Value.Year,
x.Date.Value.Month
}
into g

select new
{
Year = g.Select(y=>y.Date.Value.Year).First(),
Month = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(g.Select(n=>n.Date.Value.Month).First()),
Number = g.Count()
};

H.Dump().OrderByDescending(y=>y.Year).ThenBy(m=>DateTime.Parse(m.Month));

2014 January 843
2014 February 635
2014 March 957
2014 April 61
2013 May 1
2013 June 1257
2013 July 1243
2013 August 796
2013 September 341
2013 October 765
2013 November 609
2013 December 630

我正在尝试显示输出

2014    April       61
2014 March 957
2014 February 635
2014 January 843
2013 December 630
2013 November 609

...

我也尝试过

H.Dump().OrderByDescending(y=>y.Year).ThenByDescending(m=>DateTime.Parse(m.Month));

但由于某种原因,这似乎根本不影响月份排序顺序。对我正在做的事情/理解错误有什么想法吗?谢谢!


我尝试消除一些复杂性并更改了月份预测以获得月份值。

Month = (g.Select(n=>n.Date.Value.Month).First())

并更新了转储

H.Dump().OrderBy(y=>y.Year).ThenByDescending(m=>m.Month);

我的返回是一样的

2014    1   843
2014 2 635
2014 3 957
2014 4 73
2013 5 1
2013 6 1257
2013 7 1243
2013 8 796
2013 9 341
2013 10 765
2013 11 609
2013 12 630

最佳答案

好吧,通过基于月份的 DateTime.Parse,您将得到一个新的 DateTime,而不是 月份。由于您没有给出年份,因此将采用当前年份。

例如,对于 2013 年 3 月(或 2012 年),您将获得与 2014 年 3 月相对应的日期时间。2014 年 3 月也会给您 2014 年 3 月。

所以尝试获取日期时间的月份属性!

.OrderByDescending(x => x.Year)
.ThenByDescending(x => DateTime.Parse(x.Month).Month);

顺便说一句,我会使用

DateTime.ParseExact(x.Month, "MMMM", CultureInfo.CurrentCulture).Month

关于linq - 按年份和月份对 Linq 结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22813380/

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