【发布时间】:2011-09-22 22:56:46
【问题描述】:
我想出了这个:
public partial class Forum
{
public List<Forum> GetHierachy(Forum foru)
{
foreach (var forum in foru.SubForums.ToList())
{
yield return GetHierachy(forum);
}
}
}
为此:
public partial class Forum
{
public int Id { get; set; }
public int SubForumId { get; set; }
public virtual ICollection<Forum> SubForums { get; set; }
public virtual Forum ParentForum { get; set; }
}
我明白了:
The body of 'Jami.Data.Forum.GetHierachy(Jami.Data.Forum)' cannot be an iterator block because 'System.Collections.Generic.List<Jami.Data.Forum>' is not an iterator interface type:
然后我发现了这个: Some help understanding "yield"
所以我将方法更改为:
public IEnumerable<Forum> GetHierachy(Forum foru)
{
foreach (var forum in foru.SubForums.ToList())
{
yield return GetHierachy(forum);
}
}
现在我错过了演员表异常。
Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<Jami.Data.Forum>' to 'Jami.Data.Forum'. An explicit conversion exists (are you missing a cast?)
在这一点上,我完全不知道为什么会发生此异常。我可能错了,但对我来说,它看起来像是返回集合而不是单个项目。
【问题讨论】:
-
是的,它返回集合,因为它返回您的
GetHierarchy的返回类型。迭代器不嵌套。
标签: entity-framework entity-framework-4.1 hierarchical-data recursive-query