从列表中获取月份名称和年份

本文关键字:取月份 列表 获取 | 更新日期: 2023-09-27 17:59:03

我正试图使用LINQ从一个具有2个属性的列表中检索月份名称和年份,而不重复月份和年份的名称。

public class Record
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
}
DateTime d1 = new DateTime(2015, 1, 14);
DateTime d2 = new DateTime(2016, 3, 12);
DateTime d3 = new DateTime(2016, 4, 17);
DateTime d4 = new DateTime(2015, 5, 19);
DateTime d5 = new DateTime(2016, 6, 10);
List<Record> dates = new List<Record>
{
    new Record { Id= 1, Date = d1 },
    new Record { Id= 2, Date = d2 },
    new Record { Id= 3, Date = d3 },
    new Record { Id= 4, Date = d4 },
    new Record { Id= 5, Date = d5 }
};
//Month should be in string format (January,June, etc)
// Get Year and Months from that list withour repeating the names 
//List<string> months =
//List < string > years =

从列表中获取月份名称和年份

对于月份和使用Linq:

 List<string> months = dates.Select(d => d.Date.ToString("MMMM"))
                            .Distinct()
                            .ToArray();

有关月份名称的ToStirng格式的信息可以在MSDN上找到。

多年来:

List<string> years = dates.Select(d => d.Date.Year.ToString())
                          .Distinct()
                          .ToArray();

尽管目前还不清楚你希望年份列表看起来如何。

有关Distinct的信息可以在MSDN上找到。

用一个扩展方法来简化它(取自此处):

static class DateTimeExtensions
{
    public static string ToMonthName(this DateTime dateTime)
    {
        return CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(dateTime.Month);
    }
}

你可以这样做:

var months = dates.Select(r => r.Date.ToMonthName())
    .Distinct();
var years = dates.Select(r => r.Date.Year)
    .Distinct();

请注意,我在这里给出了年份为int,如果您想要字符串,那么只需添加ToString()