Итак, я просмотрел около 20 примеров на SO и в других местах, но не нашел ни одного, который охватил бы то, что я пытаюсь сделать. Это - Могу ли я указать свой явный встроенный компаратор типов? - похоже на то, что мне нужно, но недостаточно далеко (или я не понимаю, как это сделать).
- У меня есть список LoadData, объект LoadData имеет поля как ссылочного, так и значимого типов.
- Необходимо сгруппировать по полям ref и value, спроецировать вывод на анонимный тип
Необходимо (я думаю) предоставить настраиваемый IEqualityComparer, чтобы указать, как сравнивать поля GroupBy, но они являются анонимным типом
private class LoadData { public PeriodEndDto PeriodEnd { get; set; } public ComponentDto Component { get; set; } public string GroupCode { get; set; } public string PortfolioCode { get; set; } }
Лучший запрос GroupBy, который у меня был до сих пор:
var distinctLoads = list.GroupBy(
dl => new { PeriodEnd = dl.PeriodEnd,
Component = dl.Component,
GroupCode = dl.GroupCode },
(key, data) => new {PeriodEnd = key.PeriodEnd,
Component = key.Component,
GroupCode = key.GroupCode,
PortfolioList = data.Select(d=>d.PortfolioCode)
.Aggregate((g1, g2) => g1 + "," + g2)},
null);
Это группы, но есть еще дубликаты.
- Как я могу указать собственный код для сравнения полей GroupBy? Например, компоненты можно сравнить по Component.Code.