У меня есть набор данных со следующими полями:
IntervalPeriodTimestamp
RegisterTypeCode
ReadingReplacementVersion
IntervalValue
Я получаю показания каждые 30 минут, но иногда эти показания заменяются, и число заменяемых значений увеличивается.
Используя LINQ, как я могу вернуть только список наибольшей версии чтения за полчаса?
Я пробовал:
db.IntervalInformations
.Where(ii => ii.ChannelInformation.RegisterTypeCode == "62")
.OrderBy(ii => ii.IntervalPeriodTimestamp)
.ThenBy(ii => ii.ChannelInformation.Meter.messageType342.ReadingReplacementVersionNumber)
.ToList();
Возвращает список, отсортированный по метке времени интервала, а затем по замещающей версии, но я хочу вернуть список данных интервала только с МАКСИМАЛЬНОЙ. Я смог добиться этого в SQL с помощью кода:
WITH CTE AS
(
select SerialNumber, RegisterTypeCode, IntervalStatusCode, UOM_Code,
IntervalPeriodTimestamp, ReadingReplacementVersionNumber, IntervalValue,
RN = ROW_NUMBER()
OVER (PARTITION BY IntervalPeriodTimestamp
ORDER BY ReadingReplacementVersionNumber desc)
from MarketMessage as a
inner join messageType342 as b on a.MarketMessageID = b.MarketMessageID
inner join Meter as c on b.messageType342ID = c.MessageType342ID
inner join ChannelInformation as d on c.MeterID = d.MeterID
inner join IntervalInformation as e on d.ChannelInformationID = e.ChannelInformationID
where MPRN = 101010101010
and CAST(IntervalPeriodTimestamp as date) between '1 feb 2018' and '28 feb 2018'
and RegisterTypeCode = 62
)
select * from CTE
WHERE RN = 1
Не уверен, как я могу преобразовать это в оператор LINQ