使用LINQ获取记录的历史记录

时间:2015-08-10 12:47:04

标签: linq entity-framework history

我正在使用具有存储库模式和工作对象单元的实体框架。

我有一个实体Request,其属性为“RequestId”,“OldRequestId”,可以使用requestRepository对象访问。

例如:requestRepostiory.GetAll(),requestRepository.GetFiltered(r => r.Requestid = 10)

  • 如果我传递一个RequestId,它应该检索我特定的记录。
  • 如果OldRequestId在检索到的记录中不为空,则它也应该带来旧的请求数据。
  • 它应该继续,直到OldRequestId为空。

enter image description here

1 个答案:

答案 0 :(得分:0)

简单的方法就是这样:

public static IEnumerable<Data> GetRecursive(int id)
{
    while (true)
    {
        var tmp = GetFiltered(x => x.Requestid == id);
        yield return tmp;

        if (tmp.OldRequestId.HasValue)
            id = tmp.OldRequestId.Value;
        else
            yield break;
    }
}

请注意,此代码将运行对数据库进行多次查询。性能不是最好的,但它可能适用于您的场景。