Faris Karcic Ответов: 2

Считывайте последние записи из БД для различных транспортных средств и используйте их на просмотре


Привет ребята,
Итак, я занимаюсь созданием приложения для отслеживания водителя/транспортного средства, но у меня возникли проблемы с этой частью.

Поэтому я должен прочитать последнюю запись транспортного средства, где хранятся данные, которые показывают, включено или выключено транспортное средство (VehicleState true или false).

Эта часть предназначена для того, чтобы показать, какой автомобиль находится в сети банкомат или 5 минут назад(я все еще не уверен, как долго будет задержка между сигналами, которые я получу от датчиков)

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

Так что я попробовал с этим
public ActionResult Index()
        {
            var userId = User.Identity.GetUserId();

            var online = context.VehicleUsages.Where(m => m.AccountId == userId && m.VehicleOnOff == true)
                .GroupBy(p => p.VehicleId)
                .Select(p => p.FirstOrDefault(w => w.Id == p.Max(m => m.Id)))
                .OrderBy(p => p.VehicleId)
                .Include(p => p.Vehicle)
                .Include(p => p.Driver)
                .Include(p => p.Vehicle.VehicleTypes)
                .ToList();

            var viewModel = new DashboardViewModel
            {
                OnlineVehicles = online
            };

            return View(viewModel);
        }


Где VehicleUsages-это таблица, используемая для хранения данных всех транспортных средств за некоторый промежуток времени, которые включают в себя идентификаторы транспортного средства и водителя, уровень топлива, скорость движения и т.д., а также состояние транспортного средства.

Я также понял, что этот запрос вытащит последние данные, где VehicleOnOff (State) истинен, поэтому независимо от того, находится ли atm в сети, он выведет меня на последние данные, где vehicle был в сети.

Как я могу запросить его в список, чтобы показать на экране, какой автомобиль находится в сети?

Заранее спасибо.

2 Ответов

Рейтинг:
20

Dave Kreskowiak

Оооо...у вас есть какой-то увеличивающийся идентификационный номер или отметка даты/времени на этих записях, чтобы сказать вам, какая запись была последней вставлена в базу данных, верно? Вы не можете сделать это без него.


Faris Karcic

Да на самом деле у меня есть и то и другое

Dave Kreskowiak

Отсортируйте записи по этому полю в порядке убывания, как вы уже сделали с VehicleId, и поставьте a .Возьмите(1) в конце запроса.

Faris Karcic

Это не совсем так, но, по крайней мере, вы помогли мне мыслить более логично. Я приму это! Спасибо.

Рейтинг:
12

Faris Karcic

В конце концов я сделал вот что.

var online = context.VehicleUsages.Where(m => m.AccountId == userId)
                .GroupBy(p => p.VehicleId)
                .Select(p => p.FirstOrDefault(w => w.Id == p.Max(m => m.Id)))
                .OrderBy(p => p.VehicleOnOff)
                .Include(p => p.Vehicle)
                .Include(p => p.Driver)
                .Include(p => p.Vehicle.VehicleTypes)
                .ToList();
                

            var viewModel = new DashboardViewModel
            {
                OnlineVehicles = online
            };

            return View(viewModel);


И я только что проверил его в Razor View

@foreach (var veh in Model.OnlineVehicles)
                {

                if (veh.VehicleOnOff == true)
                    {
                    <!--html code here-->
                        
                    }
                
                }