Как использовать LINQ to Entities для выполнения следующего запроса.LINQ версия Where In Subquery With Max и Group
SELECT [id] ,[value1], [value2], [dateValue]
FROM table
WHERE dateValue IN (
SELECT MAX(dateValue)
FROM table
GROUP BY id
)
Есть несколько записей в таблице с тем же идентификатором, так что я просто хочу один из каждого идентификатора с наибольшим значением даты. Кроме того, dateValue включает компонент времени до миллисекунд и не будет дублироваться.
Я знаю, что LINQ To Entities не поддерживает ключевое слово IN
, но я читал, что вы все еще можете работать с подзапросами с помощью метода context.tableName.Any()
или путем добавления запроса внутри части Select.
Using context = ContextProvider.GetContext()
Dim table = context.tableName
Dim query = _
From rows In table _
Select New ClassName With _
{ _
.Id = rows.Id, _
.Value1 = rows.Value1, _
.Value2 = rows.Value2, _
.DateValue = rows.DateValue _
}
Return query.ToList()
End Using
Учитывая вышесказанное, я не уверен, что должно быть в запросе на Where table.Any(...
, или .DateValue = subquery
в Select, чтобы получить то, что я хочу. И в любой ситуации я не уверен, как отформатировать выражение.
Почему вы группируете по id в подзапросе, если вы просто хотите MAX (dateValue)? Вы хотите, чтобы первая запись за один ID с MAX (dateValue)? Тогда запрос sql неверен. –
Да, есть несколько записей с одним и тем же идентификатором, и я просто хочу 1 запись на идентификатор с наибольшей датой для этого идентификатора. –
Каков первичный ключ вашей таблицы? –