[英]Linq: Match to properties of child object in a list of child objects and return parent object from a list of parents
[英]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.