c# - LINQ to Entities 从有序分组中查找最高记录

标签 c# sql wcf

我有一个问题,我知道如何在 SQL 中解决但不知道如何使用 Linq to Entities。

我的数据是这样的:

ID    GROUP   TIMESTAMP
--    -----   ---------
1     A       2011-06-20
2     A       2011-06-21
3     B       2011-06-21
4     B       2011-06-22
5     B       2011-06-23
6     C       2011-06-30

我想检索所有实体对象(而不仅仅是 ID),以便我只从每个组中获取最新记录。 (即 ID 为 2、5、6 的记录)

在 SQL 中我会做这样的事情:

SELECT * FROM my_table a
WHERE a.timestamp = 
   (SELECT MAX(timestamp) FROM my_table b
   WHERE a.group = b.group)

(为了这个问题,您可以假设时间戳在每个组中都是唯一的)。

我想使用 Linq to Entities 针对 WCF 数据服务执行此查询,但我似乎无法像这样引用外部查询的嵌套查询。谁能帮忙?

最佳答案

可能不如手写版本干净高效,但这是我想出的

    var q = from a in db.MyEntities
            where a.Timestamp == (from b in db.MyEntities
                                  where b.Group == a.Group
                                  select b.Timestamp).Max()
            select a;

翻译成这个SQL

SELECT
[Project1].[Id] AS [Id],
[Project1].[Group] AS [Group],
[Project1].[Timestamp] AS [Timestamp]
FROM ( SELECT
        [Extent1].[Id] AS [Id],
        [Extent1].[Group] AS [Group],
        [Extent1].[Timestamp] AS [Timestamp],
        [SSQTAB1].[A1] AS [C1]
        FROM [MyEntities] AS [Extent1]
         OUTER APPLY
        (SELECT
                MAX([Extent2].[Timestamp]) AS [A1]
                FROM [MyEntities] AS [Extent2]
                WHERE [Extent2].[Group] = [Extent1].[Group]) AS [SSQTAB1]
)  AS [Project1]
WHERE [Project1].[Timestamp] = [Project1].[C1]

关于c# - LINQ to Entities 从有序分组中查找最高记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6576788/

相关文章:

c# - 为 Unity3D 构建一个正交相机,我怎样才能让四个特定目标保持在视线范围内?

php - 如何将PHP排序替换为SQL?

wcf - XmlReader 在&符号实体后切断空格?

c# - 具有属性名称和值的映射对象

c# - 我们如何在 WPF 应用程序中进行空闲时间处理?

c# - 是否可以从非通用应用程序使用 Wi-Fi Direct?

mysql - 从映射表中获取数据

mysql - 我应该如何为具有两个范围条件的查询建立索引?

c# - 如何读取枚举的文本值

c# - iOS 设备 token 的 Pushsharp 4.0.10.0 ApnsConfiguration 连接错误