使用Linq获取列表中的月份和年份

时间:2014-03-29 09:40:14

标签: c# sql linq

我有这样的列表

 public class Result
{
    public string id { get; set; }
    public string name { get; set; }
    public string startDate { get; set; } //smaple date 2014-03-31T12:30:03
}
List<Result>

我想获取此列表中的所有不同月份。 我尝试过这样的事情

  List<string> monthNamesList = eventListResponse.result.Select(s => Convert.ToDateTime(s.startDate).ToString("MMMM")).Distinct().ToList();

它完成了工作,唯一的问题是如果列表包含两个元素

2014-03-31T12:30:03
2013-03-31T12:30:03

我的代码只会返回一个月,我希望它会像2014 March2013 March一样。 所以我创建了一个包含年份和月份的新模型类

 public class MonthYearMOdel
{
    public string month;
    public string year;
}

任何人都可以指出我如何从我的第一个列表中获取不同月份并存储在List<MonthYearMOdel>中。 其中2014 March2013 March都将被存储。

2 个答案:

答案 0 :(得分:1)

试试这个:

List<MonthYearMOdel> monthNamesList = eventListResponse.result.Select(s => new
    {
        M = Convert.ToDateTime(s.startDate).ToString("MMMM"),
        Y = Convert.ToDateTime(s.startDate).ToString("yyyy")
    })
    .Distinct()
    .Select(u => new MonthYearMOdel()
        {
            month = u.M,
            year = u.Y,
        })
    .ToList();

答案 1 :(得分:1)

简单方法(每个字符串包含月份和年份):

List<string> monthNamesList = eventListResponse.result.Select(s => Convert.ToDateTime(s.startDate).ToString("yyyy MMMM")).Distinct().ToList();

使用MonthYearModel

public class MonthYearModel
{
    public string month;
    public string year;

    public MonthYearModel(string dateTime)
    {
        var date = Convert.ToDateTime(dateTime);
        this.month = date.ToString("MMMM");
        this.year = date.ToString("yyyy");
    }

    public bool Equals(object arg)
    {
        var model = arg as MonthYearModel;
        return (model != null) && model.month == this.month && model.year == this.year;
    }

    public int GetHashCode()
    {
        return (month.GetHashCode() * 397) ^ year.GetHashCode();
    }
}

List<MonthYearModel> = eventListResponse.result.Select(s => new MonthYearModel(s.startDate)).Distinct().ToList();