我有一个名为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中,该two具有两个合并项的连接在一起的标题。
到目前为止,我有这样的想法:
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 =“项目二标题,项目一标题”
我确信有一种更好的编码方法,但到目前为止,研究还没有结果。
谢谢:)
发布于 2011-06-07 13:05:05
var result = allEvents
.GroupBy(e => e.StartDate)
.Select(gp => new EntertainmentEvent
{
Title = string.Join(", ", gp),
StartDate = gp.Key
});发布于 2011-06-07 12:43:06
你有没有尝试过使用group by StartDate?然后,您可以将所有列出的项目合并为一个项目
发布于 2011-06-07 12:42:49
下面的代码将非常接近,不过您需要添加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();https://stackoverflow.com/questions/6260614
复制相似问题