替换IGrouping的密钥?

时间:2016-10-10 13:54:30

标签: c# linq group-by igrouping

是否可以替换IGrouping分组的var groups = orders.GroupBy(o => new { o.Date.Year, o.Date.Month });

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

ToString

但是现在我的分组键是匿名类型。我想用定义的类型“YearMonth”替换此分组键,并使用重写的public class YearMonth { public int Year { get; set; } public int Month { get; set; } public override string ToString() { return Year + "-" + Month; } } 方法。

{{1}}

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

1 个答案:

答案 0 :(得分: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;
    }
}