返回具有该对象的父级列表

时间:2014-04-24 17:43:00

标签: c# entity-framework

我正在使用实体框架和linq,我试图在不使用for循环的情况下返回父类数组。基本上这里是一个像我所面对的例子(我不能给出真实的例子,但这是同样的事情)。有一个人,当我找回那个人时,我想得到一个人的祖先(仅限男性)。所以我会返回并排列[父亲,祖父,曾祖父,......]直到“父亲”财产为空,或者换句话说,我们不知道该人的父亲是谁。使用Entity Framework执行此操作的最佳方法是什么?

以下是一个例子:

class Person()
{
    public string Name { get; set; }
    public Guid FatherId { get; set; }
    public virtual Person Father { get; set; }
}

class PersonDto()
{
    public string Name { get; set; }
    public IEnumerable<PersonDto> Ancestors { get; set; }
}

如何使用for循环执行此操作:

Person person = Context.People.Find(personId);
PersonDto personDto = person.ToDto();

Person father = person.Father;

while (father != null)
{
    personDto.Ancestors.Add(father.ToDto());
    father = father.Father;
}

1 个答案:

答案 0 :(得分:2)

假设您的person表上有一个引用父(在同一个表中)的外键,并且您正在使用SQL Server进行持久化,那么最好使用包含公用表表达式的存储过程这样做。

http://blogs.msdn.com/b/simonince/archive/2007/10/17/hierarchies-with-common-table-expressions.aspx

如果您然后使用EF运行SP,并将导入设置为返回一组&#34; Person&#34;,您还应该找到(作为额外奖励)父母实际设置在对象上