【发布时间】:2014-11-01 08:38:34
【问题描述】:
您将如何使用 LINQ to Entities 来完成以下查询。
SELECT [id] ,[value1], [value2], [dateValue]
FROM table
WHERE dateValue IN (
SELECT MAX(dateValue)
FROM table
GROUP BY id
)
表中有多个具有相同 id 的条目,所以我只想要每个 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(... 或 Select 中的 .DateValue = subquery 以获得我想要的。在任何一种情况下,我都不确定如何格式化表达式。
【问题讨论】:
-
如果只需要 MAX(dateValue),为什么要在子查询中按 id 分组?您是否希望每个 ID 的前 1 条记录具有 MAX(dateValue)?那么sql查询不正确。
-
是的,有多个条目具有相同的 ID,我只希望每个 ID 有 1 个条目,该 ID 的最大日期。
-
你的表的主键是什么?
-
主键为id和mainDate,其中第二个未使用。
-
我删除了
DISTINCT关键字,因为经过更多测试,我相信它对查询没有任何作用。
标签: sql vb.net entity-framework linq-to-entities where-in