按DateTime属性拆分对象列表

时间:2015-12-22 02:31:12

标签: c# .net datetime split asp.net-mvc-5

我正在为电影院建立一个预订系统(当然它只是一个小型的学习项目)。

这是我的展示模型

public class ShowcaseModel
{
    public string objectId { get; set; }
    public string MovieId { get; set; }
    public int Auditorium { get; set; }

    public DateTime? StartDate { get; set; }
}

我想以"per day"形式显示时间表。为了达到这个目的,我得到了DateTime比今天更大的所有Showcases并将它们放入

List< ShowcaseModel >.

现在我不知道如何使用StartDate属性将此列表拆分(分成不同的列表)。

有没有办法实现这个目标?

提前致谢。

3 个答案:

答案 0 :(得分:1)

您可以使用GroupBy方法:

List<ShowcaseModel> list = new List<ShowcaseModel>();
//...
var gooupByDay = list.GroupBy(o=>o.StartDate.Value.Date);

答案 1 :(得分:1)

我使用过fixture(只是创建你的类的随机实例)来演示如何获得每个日期的项目列表。

var fixture = new Fixture();

IEnumerable<ShowcaseModel> showCaseModel = fixture.CreateMany<ShowcaseModel>();
IEnumerable<ShowcaseModel> futureShowCases = showCaseModel.Where(s => s.StartDate != null && s.StartDate > DateTime.Now);

// we know none of start dates are null
var groupedShowCases = futureShowCases.GroupBy(s => s.StartDate.Value.Date);

List<Tuple<DateTime, IEnumerable<ShowcaseModel>>> showCasesByDate = new List<Tuple<DateTime, IEnumerable<ShowcaseModel>>>();
foreach (var groupedShowCase in groupedShowCases)
{
    var key = groupedShowCase.Key;
    showCasesByDate.Add(Tuple.Create(key, groupedShowCase.ToList().AsEnumerable()));
}

答案 2 :(得分:1)

使用Linq GroupBy()

var grouped = list.Where(f=>f.StartDate!= null)
            .GroupBy(f => f.StartDate.Value.Date, b => b,
                               (k, g) => new { Date= k.Date, 
                                               Movies= g }).ToList();

假设list是您的ShowCaseModel

的集合