На данный момент я работаю над проектом по анализу производительности различных действий. Для этого я создал проект ASP.NET MVC с базой данных MDF. Я читаю файлы журнала (файлы .csv), анализирую их и сохраняю в базу данных. CSV-файлы выглядят так:
И я получаю это в консоли браузера:
Array[6]
0: {durat: 148, err: false, time: "2019-06-03T02:00:06.86"}
1: {durat: 151, err: false, time: "2019-06-03T02:01:06.393"}
2: {durat: 139, err: false, time: "2019-06-03T02:13:06.63"}
3: {durat: 173, err: false, time: "2019-06-03T03:00:06.86"}
4: {durat: 151, err: false, time: "2019-06-03T03:01:06.393"}
5: {durat: 139, err: false, time: "2019-06-03T04:13:06.63"}
Что мне нужно сделать, чтобы сгруппировать этот вывод по часам? Нравиться:
Array[3]
0: {durat: 148, err: false, time: "2019-06-03T02:00:06.86"}
1: {durat: 151, err: false, time: "2019-06-03T02:01:06.393"}
2: {durat: 139, err: false, time: "2019-06-03T02:13:06.63"}
Array[2]
0: {durat: 173, err: false, time: "2019-06-03T03:00:06.86"}
1: {durat: 151, err: false, time: "2019-06-03T03:01:06.393"}
Array[1]
0: {durat: 139, err: false, time: "2019-06-03T04:13:06.63"}
Структура базы данных:
public partial class ChartData
{
public int Id { get; set; }
public DateTime Timestamp { get; set; }
public string Function { get; set; }
public int Duration { get; set; }
public bool IsError { get; set; }
}`
С помощью этого метода я получаю все данные из выбранной функции из базы данных:
public List<ChartDataDTO> GetDataForChart(string function)
{
return db.ChartDatas
.Where(x => x.Function == function)
.Select(x => new ChartDataDTO
{
durat = x.Duration,
err = x.IsError,
time = x.Timestamp
})
.ToList();
}
В JS я использую этот метод, например:
$.getJSON(`/Home/GetDataForChart?function=${selectedFunction}`)
Структура CSV-файла:
date,functionName,DurationInMs,3,False
Структура файла csv находится внизу
Привет @FloHab, вам следует отредактировать свой вопрос, чтобы нам не приходилось задавать вопросы, как шкиперам.
На вопрос уже дан ответ, спасибо!





Вы можете сделать это очень легко, используя LINQ. Просто сгруппируйте по дате и часу и разделите список на несколько подсписков. Вот пример:
List<ChartData> allItems = GetDataForChart("somefunctionIguess");
List<List<ChartData>> sublists = new List<List<ChartData>>();
sublists =
allItems.GroupBy( x => new {
x.Timestamp.Date,
x.Timestamp.Hour
})
.Select(x=> x.ToList()).ToList();
Или, может быть, даже что-то вроде этого:
db.ChartDatas
.Where(x => x.Function == function)
.Select(x => new ChartDataDTO
{
durat = x.Duration,
err = x.IsError,
time = x.Timestamp
})
.ToList()
.GroupBy( x => new {
x.Timestamp.Date,
x.Timestamp.Hour
})
.Select(x=> x.ToList()).ToList()
Но вам, возможно, придется внести дополнительные изменения, поскольку вы получаете несколько списков вместо одного...
Я думаю, что после CSV-файлы выглядят так: чего-то не хватает