Заменить ключ IGrouping?
Можно ли заменить Key
с помощью которого IGrouping
сгруппирован?
В настоящее время я группируюсь по анонимному типу, как это:
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 с новым ключом группировки?
1 ответ
Лично я бы просто сгруппировал по строковому значению, так как это, кажется, то, что вам действительно важно из ключа.
Другой простой вариант - создать дату, представляющую месяц, используя постоянный день:
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;
}
}