Я из старой школы, где в БД был весь доступ к данным, инкапсулированный в представления, процедуры и т. Д. Теперь я вынужден использовать LINQ для большинства очевидных запросов.
Что мне интересно, так это когда останавливаться и что практично? Сегодня мне нужно было выполнить запрос так:
SELECT D.DeviceKey, D.DeviceId, DR.DriverId, TR.TruckId, LP.Description
FROM dbo.MBLDevice D
LEFT OUTER JOIN dbo.DSPDriver DR ON D.DeviceKey = DR.DeviceKey
LEFT OUTER JOIN dbo.DSPTruck TR ON D.DeviceKey = TR.DeviceKey
LEFT OUTER JOIN
(
SELECT LastPositions.DeviceKey, P.Description, P.Latitude, P.Longitude, P.Speed, P.DeviceTime
FROM dbo.MBLPosition P
INNER JOIN
(
SELECT D.DeviceKey, MAX(P.PositionKey) LastPositionKey
FROM dbo.MBLPosition P
INNER JOIN dbo.MBLDevice D ON P.DeviceKey = D.DeviceKey
GROUP BY D.DeviceKey
) LastPositions ON P.PositionKey = LastPositions.LastPositionKey
) LP ON D.DeviceKey = LP.DeviceKey
WHERE D.IsActive = 1
Лично я не могу написать соответствующий LINQ. Итак, я нашел инструмент онлайн и вернулся на 2 страницы LINQ. Это работает должным образом - я вижу это в профилировщике, но это не поддерживаемый IMO. Другая проблема заключается в том, что я делаю проекцию и возвращаю анонимный объект. Или я могу вручную создать класс и спроецировать в этот пользовательский класс.
На данный момент мне интересно, лучше ли создать View на SQL Server и добавить его в мою модель? Это сломает мою мантру «все SQL на стороне клиента», но будет легче читать и поддерживать. Нет
Интересно, где вы остановились на T-SQL против LINQ?
EDIT
- Описание модели.
- У меня есть
DSPTrucks
, DSPDrivers
и MBLDevices
.
- Устройство может быть подключено к грузовику, водителю или к обоим.
- У меня также есть
MBLPositions
, который в основном пингует от устройства (отметка времени и положение GPS)
Что делает этот запрос - за один раз он возвращает всю информацию о драйвере устройства, так что я знаю, к чему подключено это устройство, и он также получает последнюю позицию GPS для этих устройств. Ответ может выглядеть так:
![enter image description here](https://i.stack.imgur.com/nq6VA.png)
Есть некоторые избыточные вещи, но все в порядке. Мне нужно получить его одним запросом.