[英]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": []
}]
StartDate
和EndDate
將傳遞給控制器。 對於沒有任何記錄的日期, 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.