我有一个实体集,其实体包含一个包含ID(GUID)和CreatedAt(DateTime)的复合键。此CreatedAt是创建实体的时间。每条记录代表每个实体的每个版本,以便多个记录可以具有相同的ID。
我想创建一个IQueryable-returns方法,我可以重复使用它,它只返回所请求实体的最新版本,但我很难找到答案(如果确实有答案的话) )。
我知道我可以写一个查询,例如
(from e in context.Entities where e.ID = myID orderby e.CreatedAt).FirstOrDefault();
但我希望能够做到这一点:
(from e in context.GetCurrentEntities() where e.ID = myID).FirstOrDefault();
这样它只会返回所需实体的最新版本。
这可行吗?
非常感谢你的帮助。
利
答案 0 :(得分:3)
如果按ID分组,则只能使用以下内容从每个组中选择最新的:
public IQueryable<Entity> GetCurrentEntities()
{
return from e in this.Entities
group e by e.ID into g
select g.OrderByDescending(e => e.CreatedAt).First();
}
您不需要FirstOrDefault()
,因为除非组中至少有一个Entity
,否则不会创建组。
答案 1 :(得分:2)
怎么样:
public partial class MyEntities // or whatever you call your ObjectContext
{
public IQueryable<Entity> GetCurrentEntities()
{
return from e in context.Entities
group e by e.ID into g
from ge in g
orderby ge.CreatedAt desc
select ge.First();
}
}
这不是我的头脑,但它应该让你开始。
答案 2 :(得分:0)
我认为你正在看一张较小的照片。您是否考虑过实现存储库模式?LINK否则,您需要将此GetCurrentEntities方法添加到上下文类中。