Member 14713380 Ответов: 1

Добавление значений в ASP.NET контроллер из столбца базы данных SQL server для конкретного пользователя


Моя проблема:

Мне нужно добавить "сверхурочные" за все предыдущие месяцы с начала года до выбранного месяца.

Моя таблица в sql server:

Овертайм : варчар(20)
Id | Login | Year | Month | Day | Overtime
---+-------+------+-------+-----+----------
 1 | MIPA  | 2020 |   1   |  1  |  08:00
 2 | MIPA  | 2020 |   1   |  2  |  08:00
 3 | MIPA  | 2020 |   1   |  3  |  07:30
 4 | MIPA  | 2020 |   1   |  4  |  12:00
...
30 | MIPA  | 2020 |   1   |  30 |  04:00
...
41 | MIPA  | 2020 |   2   |  1  |  08:00
42 | MIPA  | 2020 |   2   |  2  |  08:00
43 | MIPA  | 2020 |   2   |  3  |  07:30
44 | MIPA  | 2020 |   2   |  4  |  12:00
...
52 | MIPA  | 2020 |   2   |  25 |  04:00

//Итак, если пользователь выбрал март (3) и год: 2020(в выпадающем списке). Эта функция должна извлекать агрегированную информацию из столбца сверхурочные за предыдущие месяцы выбранного года. (то есть в Примере за январь (1) и февраль (2) и за 2020 год)

Контроллер:
[HttpPost]
public async Task<ActionResult> PartialTableEcp()  //change nothing
{
// Data is already extracted from other operations
// So e.g. user enters chooses year: 2020 month: March (3) 
int numberMonth= 3;
int numberYear= 2020;
int numberOfDays= 31;

// person identification by login
var userName = _httpContextAccessor.HttpContext.User.Identity.Name;

// retrieve all month records from the table, (i dont know it works)
var existingRecords = _tableEcpContext.Karta
                                      .Where(x => x.Login == userName && 
                                                  x.Year == numberYear && 
                                                  x.Month == numberMonth-1) ////will mathematical calculation work here?
                                      .Select(i => new{
                                                       i.Overtime
                                                       }).ToList(); 


and now there is a problem how to sum all these values ​​.. preferably in HHH: mm format


var thisValue = that this value would be written to the variable var;

var viewModel = new ParentView { Model1 = karta };
return PartialView("_TableViewEcp", viewModel); //change nothing

}

Модель:

public partial class Karta_Model
    {
        [Key]
        public int Id { get; set; }
        public string? Login { get; set; }
        public int Year { get; set; }
        public int Month{ get; set; }
        public int? DayOfMonth { get; set; }
        public string? Overtime { get; set; }
     }

public partial class ParentView
    {
        public List<Karta_Model> Model1 { get; set; }
    }


Что я уже пробовал:

у кого-нибудь есть идея?


то, что я написал, находится наверху

1 Ответов

Рейтинг:
2

MadMyche

Ваш запрос LINQ как написано будет возвращать только записи за месяц до того что выбрано

x.Month == numberMonth-1
То, что вам нужно будет сделать, это изменить это, чтобы быть меньше, чем выбранный месяц
x.Month < numberMonth
Теперь сложение этой информации может быть немного сложным. Оказывается, что Сверхурочные столбец в вашей таблице имеет следующий вид: Time тип данных, и модель, которую вы используете, имеет это как нулевую строку.
Теперь я понимаю, что сверхурочная работа на самом деле-это не время, а период времени .Сеть есть изначально. Это называется а TimeSpan, и временные промежутки могут быть сложены вместе.

Теперь вам нужно будет просмотреть некоторую документацию (см. ссылки ниже) и выяснить, как вы собираетесь это реализовать.
Если бы это был я, я бы изменил модель на правильный тип, а затем просто суммировал значения.

Рекомендации:
Период Структуры (Система) | Майкрософт Документы[^]
Метод TimeSpan.Add(TimeSpan) (System) | Microsoft Docs[^]