簡體   English   中英

如何選擇日期范圍?

[英]How to select in date range?

我有一張像這樣的桌子:

public class Record {
  public int Id { get; set; }
  public DateTime Date { get; set; }
  public DateTime StartTime { get; set; }
  public DateTime EndTime { get; set; }
}

我想得到類似的東西:

[{
    "Date": "StartDate",
    "Records": []
}, {
    "Date": "StartDate+1Day",
    "Records": []
}, {
    "Date": "StartDate+2Day",
    "Records": []
}, {
    "Date": "EndDate",
    "Records": []
}]

StartDateEndDate將傳遞給控制器​​。 對於沒有任何記錄的日期, Records可以為null。 使用實體框架是否有可能獲得類似的東西?

問題被標記為重復,但我認為不是。 目前,我正在這樣做以獲得我期望的結果:

     var dates = new List<DateTime>();
     for (var date = startDate; date <= endDate; date = date.AddDays(1)) {
        dates.Add(date);
     }

     var report = new List<object>();
     foreach (DateTime date in dates) {
        var item = new {
           Date = date,
           Records = db.Records
           .Where(r => r.Date >= date && r.Date <= date)
           .Select(r => new {
              r.StartTime,
              r.EndTime
           }).ToList()
        };
        report.Add(item);
     }

但是我認為這不是獲得預期結果的好方法。 我只是不知道是否有更有效的方法來獲得此結果。

您可以使用.Date檢查DateTime日是否相等:

DateTime d1 = new DateTime(2019, 7, 18, 12, 5, 2);
DateTime d2 = new DateTime(2019, 7, 18, 5, 45, 33);
d1.Date == d2.Date

至於所需的數據結構,可以創建一個具有相應屬性的新類:

public class RecordData
{
    public string Date { get; set; }
    public List<Record> Records { get; set; }
}

然后,開始將RecordData對象添加到列表中:

List<RecordData> RecordDatas = new List<RecordData>();

使用與此類似的LINQ語句(假設我們有EF records中的記錄列表命名為records ,起始日期為startDate ):

RecordDatas.Add(new RecordData
{
    Date: "StartDate",
    Records: records.Where(r => r.Date.Date == startDate.Date).ToList();
}

最后,使用庫(例如Newtonsoft Json.NET)將RecordData列表序列化為JSON:

string output = JsonConvert.SerializeObject(RecordDatas);

嘗試以下操作:

   public class Record
    {
        public int Id { get; set; }
        public DateTime Date { get; set; }
        public DateTime StartTime { get; set; }
        public DateTime EndTime { get; set; }

        public List<List<Record>> GroupRecords(List<Record> data, DateTime start, DateTime end)
        {
            return data
                .Where(x => (x.Date > start) && (x.Date < end)) 
                .GroupBy(x => x.Date.Date).Select(y => y.ToList()).ToList();

        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM