使用linq group by从具有DateTime属性的对象列表到具有间隔StartDate,EndDate的列表

米海

我有一个预订实体,该实体按天存储数据,因此,如果第一个列表中的日期是连续的,则我希望能够创建另一个按时间间隔(StartDate,EndDate)存储数据的列表,并且分组应为基于{VenueId,TimePeriodId}对。任何想法表示赞赏。

public class BookedRoom
{       
    public int VenueId { get; set;}        
    public int TimePeriodId { get; set; }        
    public DateTime Day { get; set; }        
}

 public class EventSetup
 {
    public int VenueId { get; set; }        
    public int TimePeriodId { get; set; }        
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }       
 }

List<BookedRoom> bookedRooms = new List<BookedRoom>(){
            new BookedRoom { VenueId = 1, TimePeriodId = 1, Day = new DateTime(2013, 9, 1)},
            new BookedRoom { VenueId = 1, TimePeriodId = 1, Day = new DateTime(2013, 9, 2)},
            new BookedRoom { VenueId = 2, TimePeriodId = 2, Day = new DateTime(2013, 9, 3)},
            new BookedRoom { VenueId = 1, TimePeriodId = 1, Day = new DateTime(2013, 9, 4)}
        };


        // Some Linq to process bookedRooms and obtain a list which I can use to do the following:

        List<EventSetup> setups = new List<EventSetup>()
        {
            new EventSetup{ VenueId =1, TimePeriodId = 1, StartDate=new DateTime(2013, 9, 1), EndDate = new DateTime(2013, 9, 2)},
            new EventSetup{ VenueId =2, TimePeriodId = 2, StartDate=new DateTime(2013, 9, 3), EndDate = new DateTime(2013, 9, 3)},
            new EventSetup{ VenueId =1, TimePeriodId = 1, StartDate=new DateTime(2013, 9, 4), EndDate = new DateTime(2013, 9, 4)}
        };
丹尼尔·希尔加斯(Daniel Hilgarth)

您可以使用GroupBy结合SelectManyAggregate为此:

var setups =
    bookedRooms.GroupBy(x => Tuple.Create(x.TimePeriodId, x.VenueId))
               .SelectMany(x => x.Aggregate(
                                    new List<EventSetup>(), AccumulateRooms))
               .OrderBy(x => x.StartDate)
               .ToList();

List<EventSetup> AccumulateRooms(List<EventSetup> existingSetups,
                                 BookedRoom currentRoom)
{
    var setup = existingSetups.LastOrDefault();
    if(setup == null || setup.EndDate.AddDays(1) != currentRoom.Day.Date)
    {
        setup = new EventSetup
        {
            VenueId = currentRoom.VenueId,
            TimePeriodId = currentRoom.TimePeriodId,
            StartDate = currentRoom.Day.Date,
        };
        existingSetups.Add(setup);
    }
    setup.EndDate = currentRoom.Day.Date;
    return existingSetups;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用linq group by从具有DateTime属性的对象列表到具有间隔StartDate,EndDate的列表

来自分类Dev

LINQ to XML-具有父级属性的自定义对象列表

来自分类Dev

如何在XElement属性上使用LINQ Group by

来自分类Dev

使用LINQ从两个具有相同属性的不同列表创建对

来自分类Dev

使用LINQ获取具有属性=另一个对象属性的对象

来自分类Dev

使用SQL Group by并具有

来自分类Dev

使用LINQ从列表中获取具有特定属性最大值的对象

来自分类Dev

LINQ:获取列表中具有最大属性值的记录

来自分类Dev

LINQ to Sql左外部与Group By并具有子句的联接

来自分类Dev

RxAndroid:可以对具有间隔或延迟的api请求数组使用zip函数吗?

来自分类Dev

如何在linq C#中使用group by并获取记录列表

来自分类Dev

LINQ Group嵌套列表用于重组数据

来自分类Dev

LINQ如何使用“分组依据”来简化具有重复属性的列表

来自分类Dev

Linq to实体-SQL查询-位置列表包含具有2个属性(或更多属性)的对象

来自分类Dev

获取具有重复C#linq的对象的列表

来自分类Dev

LINQ Group通过列表<>

来自分类Dev

具有GROUP BY和COUNT的LINQ

来自分类Dev

我应该如何使用linq使用group by并对模型列表的不同值求和

来自分类Dev

具有JOIN,GROUP,SUM()的LINQ并返回新的SELECT

来自分类Dev

使用Linq尝试提取具有相应票证的类别列表

来自分类Dev

使用LINQ将具有多个继承项的具有相应子项的对象列表分组

来自分类Dev

使用GROUP BY后查找具有MAX值的行

来自分类Dev

Linq-获取具有列表属性的对象,该属性在另一个列表中不包含值

来自分类Dev

使用LINQ从列表中获取具有特定属性最大值的对象

来自分类Dev

LINQ如何使用“分组依据”来简化具有重复属性的列表

来自分类Dev

LINQ Group通过列表<>

来自分类Dev

在LINQ中使用group by填充对象列表

来自分类Dev

在LINQ to SQL中使用group by

来自分类Dev

C# LINQ Group By 具有自定义属性的多个字段

Related 相关文章

  1. 1

    使用linq group by从具有DateTime属性的对象列表到具有间隔StartDate,EndDate的列表

  2. 2

    LINQ to XML-具有父级属性的自定义对象列表

  3. 3

    如何在XElement属性上使用LINQ Group by

  4. 4

    使用LINQ从两个具有相同属性的不同列表创建对

  5. 5

    使用LINQ获取具有属性=另一个对象属性的对象

  6. 6

    使用SQL Group by并具有

  7. 7

    使用LINQ从列表中获取具有特定属性最大值的对象

  8. 8

    LINQ:获取列表中具有最大属性值的记录

  9. 9

    LINQ to Sql左外部与Group By并具有子句的联接

  10. 10

    RxAndroid:可以对具有间隔或延迟的api请求数组使用zip函数吗?

  11. 11

    如何在linq C#中使用group by并获取记录列表

  12. 12

    LINQ Group嵌套列表用于重组数据

  13. 13

    LINQ如何使用“分组依据”来简化具有重复属性的列表

  14. 14

    Linq to实体-SQL查询-位置列表包含具有2个属性(或更多属性)的对象

  15. 15

    获取具有重复C#linq的对象的列表

  16. 16

    LINQ Group通过列表<>

  17. 17

    具有GROUP BY和COUNT的LINQ

  18. 18

    我应该如何使用linq使用group by并对模型列表的不同值求和

  19. 19

    具有JOIN,GROUP,SUM()的LINQ并返回新的SELECT

  20. 20

    使用Linq尝试提取具有相应票证的类别列表

  21. 21

    使用LINQ将具有多个继承项的具有相应子项的对象列表分组

  22. 22

    使用GROUP BY后查找具有MAX值的行

  23. 23

    Linq-获取具有列表属性的对象,该属性在另一个列表中不包含值

  24. 24

    使用LINQ从列表中获取具有特定属性最大值的对象

  25. 25

    LINQ如何使用“分组依据”来简化具有重复属性的列表

  26. 26

    LINQ Group通过列表<>

  27. 27

    在LINQ中使用group by填充对象列表

  28. 28

    在LINQ to SQL中使用group by

  29. 29

    C# LINQ Group By 具有自定义属性的多个字段

热门标签

归档