我有一个像这样的表
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);
}
但是我认为这不是获得预期结果的好方法。我只是不知道是否有更有效的方法来获得此结果。
答案 0 :(得分:0)
您可以使用DateTime
检查.Date
天是否相等:
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语句(假设我们有名为records
的EF记录列表和名为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);
答案 1 :(得分:0)
尝试以下操作:
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();
}
}