繁体   English   中英

返回对象的父母名单

[英]Return list of parents with the object

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

这是一个例子:

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;
}

假设您的人员表上有一个引用父亲(在同一张表中)的外键,并且您正在使用SQL Server进行持久化,那么最好使用包含公用表表达式的存储过程来执行此操作。

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

如果随后使用EF运行SP,并将导入设置为返回一组“人”,则还应该发现(作为附加的奖励)父母实际上是在对象上设置的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM