0

是否可以替换KeyanIGrouping的分组方式?

我目前正在按这样的匿名类型进行分组:

var groups = orders.GroupBy(o => new { o.Date.Year, o.Date.Month });

但是现在我的分组键是匿名类型。我想用一个定义的类型“YearMonth”替换这个分组键,并用一个重写的ToString方法。

public class YearMonth
{
    public int Year { get; set; }
    public int Month { get; set; }

    public override string ToString()
    {
        return Year + "-" + Month;
    }
}

有没有办法替换分组键?或者使用新的分组键从现有的 IGrouping 创建一个新的 IGrouping?

4

1 回答 1

2

好吧,我个人只会对字符串值进行分组,因为这似乎是您真正关心的关键。

另一个简单的选项是使用固定的日期创建一个表示月份的日期:

orders.GroupBy(o => new DateTime (o.Date.Year, o.Date.Month, 1))

然后你有内置的值相等和字符串格式。

可以制作YearMoth一个不可变的结构,这也将为您提供价值相等的语义:

public struct YearMonth
{
    public readonly int Year;
    public readonly int Month;

    public YearMonth(int year, int month)
    {
        Year = year;
        Month = month;
    }

    public override string ToString()
    {
        return Year + "-" + Month;
    }
}
于 2016-10-10T14:11:26.970 回答