首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在单个List<>中联接项

在单个List<>中联接项
EN

Stack Overflow用户
提问于 2011-06-07 12:31:39
回答 3查看 93关注 0票数 2

我有一个名为EntertainmentEvent的自定义对象列表:

代码语言:javascript
复制
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具有两个合并项的连接在一起的标题。

到目前为止,我有这样的想法:

代码语言:javascript
复制
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 =“项目二标题,项目一标题”

我确信有一种更好的编码方法,但到目前为止,研究还没有结果。

谢谢:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-07 13:05:05

代码语言:javascript
复制
var result = allEvents
   .GroupBy(e => e.StartDate)
   .Select(gp => new EntertainmentEvent
                        {
                          Title = string.Join(", ", gp), 
                          StartDate = gp.Key 
                        });
票数 2
EN

Stack Overflow用户

发布于 2011-06-07 12:43:06

你有没有尝试过使用group by StartDate?然后,您可以将所有列出的项目合并为一个项目

票数 2
EN

Stack Overflow用户

发布于 2011-06-07 12:42:49

下面的代码将非常接近,不过您需要添加Null检查和所有这些内容。

代码语言:javascript
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6260614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档