Я могу получить нужные результаты в SQL Server, но я бы хотел сделать это в LINQ.
Вот рабочий SQL:
declare @interim table (PushContent varchar(max),
OrderNumber varchar(50),
TimeProcessed DateTime)
INSERT INTO @interim (PushContent, OrderNumber, TimeProcessed)
SELECT
Q.PushContent, TS.varOrderNumber, Q.TimeProcessed
FROM dbo.PushQueueEntry Q
INNER JOIN dbo.Transactions T ON
T.intTransactionID = Q.TransactionID
INNER JOIN dbo.CustomerIntegrationTarget TGT ON
TGT.CustomerIntegrationTargetID = Q.CustomerIntegrationTargetID
INNER JOIN dbo.TransactionServices TS ON
TS.intTransactionID = Q.TransactionID
WHERE
Q.TimeProcessed >= '2019-01-26 00:00:00'
AND Q.TimeProcessed <= '2019-01-26 23:59:59'
AND TGT.CustomerIntegrationDetailID = 63
AND Q.QueueStatus = 4
AND TGT.ContentType = 25
AND T.intCreatedByUserID IN(
SELECT
MAP.UserID
FROM dbo.CustomerIntegrationServicerMapping MAP
WHERE
MAP.CustomerIntegrationDetailID = 63 AND
MAP.ServicerCode = 'SLS') --Limit to SLS orders only
group by TS.varOrderNumber, Q.PushContent, Q.TimeProcessed
--select * from @interim
select P.PushContent
from (select PushContent, OrderNumber, TimeProcessed,
ROW_NUMBER() over(partition by OrderNumber
order by TimeProcessed desc) as rn
from @interim
) as P
where P.rn = 1
Вот текущий LINQ:
List<int> cisMapUserIDs = _context.CustomerIntegrationServicerMappings
.Where(u => u.CustomerIntegrationDetailID == 63
&& u.ServicerCode == "SLS")
.Select(u => u.UserID)
.ToList();
List<int> transIDs = _context.Transactions
.Where(t => cisMapUserIDs.Contains(t.CreatedByUserID))
.Select(t => t.TransactionID)
.ToList();
List<PushQueueEntry> pushQueueEntries = _context.PushQueueEntries
.Where(x => x.CustomerIntegrationTarget.CustomerIntegrationDetailID == 63
&& x.QueueStatus == QueueStatus.Complete
&& x.CustomerIntegrationTarget.CustomerIntegrationTargetID == 401
&& x.TimeProcessed >= lowerTimeBoundary
&& x.TimeProcessed <= upperTimeBoundary
&& transIDs.Contains(x.TransactionID))
.ToList();
Мне нужно добавить еще одно объединение на стороне LINQ, чтобы оно соответствовало соединению на стороне SQL, что позволяет мне получить varOrderNumber
из TransactionServices
, а затем мне нужно сгруппироватьи сделать заказ таким образом, чтобы я мог взять последнюю строку на основе TimeProcessed
из таблицы PushQueueEntry
.Я читал сообщения о присоединении в LINQ, но когда я пытаюсь это сделать, я получаю сообщение об ошибке, что символ объединения не может быть разрешен.Я также пытался использовать только предложение where, но безуспешно.
SQL возвращает одно поле, которое мне в основном интересно, но в коде бывают случаи, когда другие столбцы необходимы дляобработка.
Возможно, это пример, в котором LINQ не реализовал функцию SQL, но, скорее всего, я просто не знаю синтаксис для выполнения того, чего я хочу достичь.
Заранее спасибо