var listForTestGroup = new List<Booking>
{
new Booking{Project="HR", Date= DateTime.Parse("01/02/2020") , Allocation= 10},
new Booking{Project="CRM", Date= DateTime.Parse("01/02/2020") , Allocation= 15},
new Booking{Project="HR", Date= DateTime.Parse("02/02/2020") , Allocation= 10},
new Booking{Project="CRM", Date= DateTime.Parse("02/02/2020") , Allocation= 15},
new Booking{Project="HR", Date= DateTime.Parse("03/02/2020") , Allocation= 15},
new Booking{Project="CRM", Date= DateTime.Parse("03/02/2020") , Allocation= 15},
new Booking{Project="HR", Date= DateTime.Parse("04/02/2020") , Allocation= 15},
new Booking{Project="CRM", Date= DateTime.Parse("04/02/2020") , Allocation= 15}
,
new Booking{Project="HR", Date= DateTime.Parse("05/02/2020") , Allocation= 15},
new Booking{Project="CRM", Date= DateTime.Parse("05/02/2020") , Allocation= 15},
new Booking{Project="ECom", Date= DateTime.Parse("05/02/2020") , Allocation= 15},
new Booking{Project="ECom", Date= DateTime.Parse("06/02/2020") , Allocation= 10}
,
new Booking{Project="CRM", Date= DateTime.Parse("06/02/2020") , Allocation= 15},
new Booking{Project="ECom", Date= DateTime.Parse("07/02/2020") , Allocation= 10},
new Booking{Project="CRM", Date= DateTime.Parse("07/02/2020") , Allocation= 15}
};返回:
[
{ From:01/02/2020 , To:02/02/2020 , [{ Project:CRM , Allocation:15 },{ Project:HR , Allocation:10 }] },
{ From:03/02/2020 , To:04/02/2020 , [{ Project:CRM , Allocation:15 },{ Project:HR , Allocation:15 }] },
{ From:05/02/2020 , To:05/02/2020 , [{ Project:CRM , Allocation:15 },{ Project:HR , Allocation:15 },{ Project:ECom , Allocation:15 }] },
{ From:06/02/2020 , To:07/02/2020 , [{ Project:CRM , Allocation:15 },{ Project:ECom , Allocation:10 }] }
]发布于 2022-05-02 15:15:51
你的分组逻辑不清楚。你是按4组分组,还是按月分组?
按月分组:
var groupings = bookings
.OrderBy(x => x.Date)
.GroupBy(x => x.Date.ToString("yyyy-MM"))
.Select(g => new
{
From = g.Min(x => x.Date),
To = g.Max(x => x.Date),
Bookings = g.Select(x => new {x.Project, x.Allocation})
});按4分组:
var groupings = bookings
.OrderBy(x => x.Date)
.Select((b, i) => new { Index = i, Booking = b })
.GroupBy(g => g.Index / 4)
.Select(g => new
{
From = g.Min(x => x.Booking.Date),
To = g.Max(x => x.Booking.Date),
Bookings = g.Select(x => new {x.Booking.Project, x.Booking.Allocation})
});发布于 2022-05-17 18:05:49
这是个有点棘手的问题
这是问题想要的
listForTestGroup.
GroupBy(x => x.Project).
Select((g, idx) => new { Group = g, ProjectID = idx + 1 }).
SelectMany(x => x.Group.Select(r => new { r.Date, r.Project, r.Allocation, x.ProjectID })).
GroupBy(r => r.Date).
Select((g, idx) => new { Group = g, Rank = idx + 1, SumProjectID = g.Sum(r => r.ProjectID), SumAllocation = g.Sum(r => r.Allocation) }).
SelectMany(x => x.Group.Select(r => new { r.Date, r.Project, r.Allocation, Diff = r.Date.AddDays(-x.Rank), x.SumProjectID, x.SumAllocation })).
GroupBy(r => new { r.Diff, r.SumProjectID, r.SumAllocation }).
Select(r => new { From = r.Min(d => d.Date), To = r.Max(d => d.Date), Items = r.Select(s => new { s.Project, s.Allocation }).Distinct().ToList() }).
OrderBy(r => r.From).
ToList();发布于 2022-07-17 10:57:04
请试试这段代码,它可以帮助你。
var groupings = bookings
.OrderBy(x => x.Date)
.GroupBy(x => x.Date.ToString("yyyy-MM"))
.Select(g => new BookingGrouping
{
From = g.Min(x => x.Date),
To = g.Max(x => x.Date),
Items = g.Select(x => new BookingGroupingItem() {Project= x.Project,Allocation= x.Allocation }).ToList()
}).ToList();https://stackoverflow.com/questions/72064876
复制相似问题