Как получить Datetime тех же часов? - PullRequest
1 голос
/ 11 июля 2019

В данный момент я работаю над проектом, чтобы проанализировать выполнение различных действий. Для этого я создал проект 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

1 Ответ

3 голосов
/ 11 июля 2019

Вы можете сделать это очень легко, используя 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()

Но вам, возможно, придется внести дополнительные изменения, поскольку вы получаете несколько списков вместо одного ...

...