gpt4 book ai didi

c# - 根据日期对列表进行分组,每个项目有多个日期

转载 作者:行者123 更新时间:2023-11-29 19:38:31 25 4
gpt4 key购买 nike

我有一个如下列表:-

列表

编辑(生日和纪念日的年份可能不同)

- EmpGuid -265d317b-b819-4171-ba12-e64388746d81
Name - abc
Birthday - 15 Aug 2000
Anniversary- 12 july 1989

EmpGuid - 265d317b-b819-4171-ba12-e64388746d82
Name - xyz
Birthday - 24 Jan 2000
Anniversary- 15 Aug 1988

EmpGuid - 265d317b-b819-4171-ba12-e64388746d83
Name - mno
Birthday - 15 aug 2000
Anniversary- 24 Jan 1987

我想按照这样的日期对列表进行分组:-

12 July - abc anniversary

15 aug - abc Birthday
mno Birthday
xyz Anniversary

24 jan - xyz birthday
mno anniversary

我试过这样做:-

 var groupedEmpList = FinalList.GroupBy(u => u.Birthdate)
.Select(grp =>new { GroupID =grp.Key, FinalList = grp.ToList()})
.ToList()

以上没有给我想要的输出。对此的任何帮助将不胜感激

最佳答案

此解决方案使用 SelectMany获取可以按项目分组的所有日期的扁平化列表:

var result = FinalList.Select(item => new 
{
Date = new [] { item.Birthday.ToString("ddMM"), item.Anniversary.ToString("ddMM") },
Item = item
})
.SelectMany(item => item.Date.Select(date => new { Date = date, Item = item.Item }))
.GroupBy(item => item.Date)
.Select(grouping => new { Date = grouping.Key, Events = grouping.ToList() }).ToList();

也可以执行第一个 selectSelectMany 内- 为了回答的目的,我把它分开了


添加事件类型(并在删除第一个 select 的过程中):

var result = FinalList.SelectMany(item => new List<dynamic>
{
new { Date = item.Birthday.ToString("ddMM"), Event = "Birthday", Item = item },
new { Date = item.Anniversary.ToString("ddMM"), Event = "Anniversary", Item = item }
})
.GroupBy(item => item.Date)
.Select(grouping => new { Date = grouping.Key, Events = grouping.ToList() }).ToList();

要输出这些结果,您可以:

public enum EventTypes
{
Birthday,
Anniversary
}

public class Event
{
public string Date { get; set; }
public EventTypes Type { get; set; }
public IEnumerable<dynamic> Items { get; set; }
}

var result = FinalList.SelectMany(item => new List<dynamic>
{
new { Date = item.Birthday.ToString("ddMM"), Type = EventTypes.Birthday, Item = item },
new { Date = item.Anniversary.ToString("ddMM"), Type = EventTypes.Anniversary, Item = item }
})
.GroupBy(item => new { item.Date, item.Type })
.Select(grouping => new Event { Date = grouping.Key.Date, Type = grouping.Key.Type, Items = grouping.ToList() }).ToList();

现在 result列表是 List<Event>在里面你也有你的 oridinal 对象在 Items (将该列表的 dynamic 替换为您原来的类类型 - 我只是不知道)

关于c# - 根据日期对列表进行分组,每个项目有多个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38966558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com