【发布时间】:2011-05-24 08:47:09
【问题描述】:
我有两个实体,假设它们被称为容器和记录。它们具有主子关系:一个“容器”可以保存许多记录。
数据库中的Records表有以下列:
- 身份证
- 日期
- Container_Id
- RecordType_Id
Record 实体没有任何反向引用 Container 的导航属性。
我正在为我的存储库编写一个 LINQ 查询,它将仅检索每个 RecordType_Id 具有 最近日期的容器的记录。应忽略所有较旧的记录。
因此,如果一个容器有 5 条记录,每个 RecordType_Id 一条,日期为 2011 年 5 月 24 日。但每个 RecordType_Id 也有另外 5 条记录,但日期为 2011 年 5 月 20 日。然后只会检索日期为 5 月 24 日的前 5 个并将其添加到容器中的集合中。
我想出了一个 SQL 查询,它可以满足我的需要(但也许有一些更有效的方法?):
select t.*
from Records t
inner join (
select Container_Id, RecordType_Id, max(Date) AS MaxDate
from Records
group by Container_Id, RecordType_Id ) g
on t.Date = g.MaxDate
and t.Container_Id = g.Container_Id
and t.RecordType_Id = g.RecordType_Id
order by t.Container_Id
, t.RecordType_Id
, t.Date
但是,我正在努力将其转换为正确的 LINQ 查询。 EF 本身已经生成了一个相当大的查询,只是为了加载实体,这让我不确定这个 SQL 查询中有多少实际上与 LINQ 查询相关。
【问题讨论】:
标签: entity-framework entity-framework-4 linq-to-entities entity-framework-4.1