我有一个名为EntertainmentEvent的自定义对象列表:
public class EntertainmentEvent
{
public string Title { get; set; }
public string TagLine { get; set; }
public string Overview { get; set; }
public string ThumbnailUrl { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public string EventTime { get; set; }
public Reoccurrence Reoccurrence { get; set; }
public string Url { get; set; }
}
我想将具有相同StartDate的项目合并到一个EntertainmentEvent中,该事件具有连接在一起的两个合并项目的标题。
到目前为止,我有这个:
var duplicateDates = allEvents.Join
(
allEvents, x => x.StartDate, y => y.StartDate,
(x, y) => x.Title != y.Title
? new EntertainmentEvent
{
Title = string.Format("{0}, {1}", x.Title, y.Title),
StartDate = x.StartDate
}
: null
)
.Where(x => x != null)
.ToList();
这种方法唯一的问题是我得到了重复的项目 - 对于一个错误的日期,duplicateDates列表最终会有两个条目
条目1:Startdate = 1/1/2011,Title =“Item One Title,Item Two Title”
条目2:Startdate = 1/1/2011,Title =“Item Two Title,Item One Title”
我确信有一种更好的编码方式,但迄今为止研究空洞。
谢谢:)
答案 0 :(得分:2)
您是否尝试过按StartDate
分组?然后你可以将所有列出的项目合并为一个
答案 1 :(得分:2)
var result = allEvents
.GroupBy(e => e.StartDate)
.Select(gp => new EntertainmentEvent
{
Title = string.Join(", ", gp),
StartDate = gp.Key
});
答案 2 :(得分:0)
以下内容将会关闭,但您需要添加Null检查以及所有这些。
class Comparer : IEqualityComparer <EntertainmentEvent>
{
public bool Equals( EntertainmentEvent x, EntertainmentEvent y )
{
return x.Startdate == y.Startdate;
}
public int GetHashCode( EntertainmentEvent event )
{
return event.StartDate.GetHashCode();
}
}
var duplicateDates = allEvents.Join
(
allEvents, x => x.StartDate, y => y.StartDate,
(x, y) => x.Title != y.Title
? new EntertainmentEvent
{
Title = string.Format("{0}, {1}", x.Title, y.Title),
StartDate = x.StartDate
}
: null
)
.Where(x => x != null)
.Distinct( new Comparer() )
.ToList();