替换 IGrouping 的键?
Replace the Key of an IGrouping?
是否可以替换IGrouping
分组的Key
?
我目前正在按这样的匿名类型分组:
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?
就个人而言,我只会对字符串值进行分组,因为这似乎是您真正关心的关键。
另一个简单的选择是使用常量日创建表示月份的日期:
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;
}
}
是否可以替换IGrouping
分组的Key
?
我目前正在按这样的匿名类型分组:
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?
就个人而言,我只会对字符串值进行分组,因为这似乎是您真正关心的关键。
另一个简单的选择是使用常量日创建表示月份的日期:
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;
}
}