В c#, после перечисления через коллекцию типов 'TeamFixtureResultPage' я использую оператор LINQ 'GroupBy', чтобы сгруппировать элементы по месяцам, используя значение dateTime, установленное в экземпляре. Как и ожидалось, когда он завершит обработку, он вернет IEnumerable<IGrouping<int, TeamFixtureResultPage>>
. Я хотел бы иметь возможность упорядочить отсортированные месяцы и отсортированные типы результатов результатов команды. В порядке возрастания или убывания. Чтобы достичь этого в данный момент, у меня есть следующий код, который, несмотря на получение результата, который я желаю, все выглядит немного неуклюжим и кажется, что я иду против принципов DRY? Вероятно, есть и лучшие способы добиться этого.
IEnumerable<IGrouping<int, TeamFixtureResultPage>> groupedFixResList = null;
if (teamFixResLandingPage.FixturesDisplay == "descending")
{
groupedFixResList = seasonLandingPage
.Children<TeamFixtureResultPage>()
.OrderByDescending(x => x.KickOffTime)
.GroupBy(x => x.KickOffTime.Month)
.OrderBy(group => group.Key)
.Reverse();
//example output (descending)
//MAY
// -Fixture 1 20/05/2020
// -Fixture 2 15/05/2020
// -Fixture 3 10/05/2020
//APRIL
// -Fixture 1 27/04/2020
// -Fixture 2 18/04/2020
// -Fixture 3 13/04/2020
}
else
{
groupedFixResList = seasonLandingPage
.Children<TeamFixtureResultPage>()
.OrderBy(x => x.KickOffTime)
.GroupBy(x => x.KickOffTime.Month)
.OrderBy(group => group.Key);
//example output (ascending)
//APRIL
// -Fixture 3 13/04/2020
// -Fixture 2 18/04/2020
// -Fixture 1 27/04/2020
//MAY
// -Fixture 3 10/05/2020
// -Fixture 2 15/05/2020
// -Fixture 1 20/05/2020
}
У меня есть пара вопросов на данный момент.
Q1. Можно ли обрезать это, так как я эффективно вызываю следующее дважды
groupedFixResList = seasonLandingPage
.Children<TeamFixtureResultPage>()
Q2. TeamFixtureResultPage имеет гораздо больше свойств, чем то, что мне действительно нужно передать в представление, так что есть ли возможность в любом случае создать новый объект внутри одного оператора LINQ, например, добавить следующее в .Select где-нибудь?
var fixtureResult = new fixtureResult()
{
Scoreline = x.scoreline,
FixtureDate = x.fixtureDate
}
Я мог бы сделать следующее после операторов LINQ
var newGroupedFixResList = new List<FixtureResult>();
foreach (var group in groupedFixResList)
{
foreach (var item in group)
{
var fixRes = new FixtureResult()
{
//map properties
}
newGroupedFixResList.Add(fixRes);
}
}
У меня есть эта работа, и, возможно, я обдумываю это? Может кто-нибудь предложить какой-либо совет, пожалуйста?
Спасибо