У меня есть система тикетов, в которой я пытаюсь получить основную информацию о последней добавленной заметке о тикете, основываясь на том, какие тикеты еще открыты.
Вот сводные таблицы, включая дополнительные столбцы, которые я не запрашиваю:
Билетный стол
TicketId
CustomerId
DateIn
CallNature
OpenClosed
Таблица TicketDetails
TicketDetailsId
TicketId
TicketNote
DateLogged
Вот запрос SQL:
SELECT
t.TicketId,
t.CustomerId,
t.DateIn,
(SELECT TOP 1 td.DateLogged
FROM TicketDetails td
WHERE td.TicketId = t.TicketId
ORDER BY td.DateLogged DESC) DateLogged
FROM
Tickets t
WHERE
t.OpenClosed = 1
Вот мой текущий запрос Linq:
var result = from t in ef.Tickets
where t.OpenClosed == true
select new
{
TicketId = t.TicketId,
CustomerId = t.CustomerId,
DateIn = t.DateIn,
DateLogged = (from td in ef.TicketDetails
where td.TicketId == t.TicketId
orderby td.DateLogged descending
select td.DateLogged).Take(1)
};
Вот пример результата запроса Linq:
TicketId = 11000
CustomerId = 4622
DateIn = 2018-01-25T00:00:00
DateLogged = 0001-01-01T00:00:00
должно быть:
TicketId = 11000
CustomerId = 4622
DateIn = 2018-01-25T00:00:00
DateLogged = 2018-12-12T13:32:42
У меня нет всех полей в примере, но они не имеют отношения к вопросу.
Когда я запускаю SQL-запрос, результаты ожидаются. Когда я запускаю запрос Linq, все поля заполняются, кроме DateLogged, он продолжает возвращать значение по умолчанию (0001-01-01).
Я подтвердил, что на каждый Билет есть хотя бы 1 TicketDetail для возврата.