实体框架创建最新的IQueryable

时间:2009-08-13 17:27:29

标签: linq entity-framework

我有一个实体集,其实体包含一个包含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();

这样它只会返回所需实体的最新版本。

这可行吗?

非常感谢你的帮助。

3 个答案:

答案 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方法添加到上下文类中。