【问题标题】:Grouping common data into new string with LINQ C#使用 LINQ C# 将公共数据分组到新字符串中
【发布时间】:2021-03-02 08:24:16
【问题描述】:

基本上,我有一个对象列表 - 包含这些字符串字段的事件:

Date:
Event_Name: 
Event_Time:
Event_Place:

当然,有些事件是在同一天发生的,这就是我的问题所在:

我想将共享相同日期(键)的事件组合在一起,并创建一个新字符串,其中将包含同一日期的所有事件。

例子:

之前:

Object 1:

Date: 2020/11/27
Event_Name: Dinner
Event_Time: 5pm
Event_Place: Johhny’s

Object 2:

Date: 2020/11/27
Event_Name: Dentist
Event_Time: 11am
Event_Place: Street 15

分组后:

Object:

Date: 2020/11/27
Event_Name: Dinner Dentist
Event_Time: 5pm 11am
Event_Place: Johhny’s Street 15

我尝试使用 LINQ 对它们进行分组——这有效,但不是我想要的方式——它将它们组合在一起,但它没有将它们“保存”为一个字符串。

有什么办法可以做到吗?

【问题讨论】:

    标签: c# string linq group-by


    【解决方案1】:

    这应该可行:

    var grpByDate = allEvents.GroupBy(e => e.Date).Select(e =>
    new Event
    {
      Date = e.Key,
      Event_Name = string.Join(" ", e.SelectMany(x => x.Event_Name)),
      Event_Time = string.Join(" ", e.SelectMany(x => x.Event_Time)),
      Event_Place = string.Join(" ", e.SelectMany(x => x.Event_Place)),
    });
    

    【讨论】:

      【解决方案2】:

      当然,这可以使用 Enumerable.GroupBy 的重载之一。使用带参数 resultSelector 的重载:

      // make groups of events where every event in the group has the same date:
      var result = allEvents.GroupBy(event => event.Date,
      
          // parameter resultSelector: take every Date, and all events on this date to make
          // one new:
          (date, eventsOnThisDate) => new
          {
              Date = date,
              Names = String.Join(' ', eventsOnThisDate.Select(event => event.Event_Name)),
              Times = String.Join(' ', eventsOnThisDate.Select(event => event.Event_Time)),
              Places = String.Join(' ', eventsOnThisDate.Select(event => event.Event_Place)),
          });
      

      但是,您确定要这个吗?您将无法看到每个事件将在何处/何时发生。将每个日期的所有事件都放在该日期,每个事件的时间/名称/地点不是更有用吗?

      // parameter resultSelector:
      (date, eventsOnThisDate) => new
      {
           Date = date,
           EventsOnThisDate = eventsOnThisDate.Select(event => new
           {
               Time = event.event_Time,
               Name = event.event_Name,
               Place = event.event_Place,
           })
           .ToList(),
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-23
        • 2010-11-04
        • 1970-01-01
        • 2015-08-31
        • 1970-01-01
        • 2020-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多