次のコードでスタック オーバーフローが発生しています。私は問題が何であるかを知っています.
Children = new LazyList<Page>(from p in GetAllPages(language)
where p.ParentPage == s.Id
select p)
p.ParentPage == s.Id を追加する前に
private IQueryable<Page> GetAllPages(string language)
{
return from s in context.Pages
where (from c in GetAllContent()
where c.PageId == s.Id &&
c.Language.ToLower() == language.ToLower()
select c).Any()
let contents = (from c in GetAllContent()
where c.PageId == s.Id
select c)
select new Page()
{
Id = s.Id,
SiteId = s.SiteId,
Type = s.Type,
Template = s.Template,
ParentPage = s.ParentPage,
Visible = s.Visible,
Order = s.Order,
Contents = contents.ToList(),
Children = new LazyList<Page>(from p in GetAllPages(language)
where p.ParentPage == s.Id
select p)
};
}
どうすればこれを正しく行うことができますか?
更新: コードの背後にある理由は、ツリー構造のメニューがあり、1 つのメニュー項目に 0 から多くの子項目を含めることができるためです。言語部分はスキップできますが、私のサイトは複数の言語をサポートしており、言語パラメーターを使用すると、特定の言語のコンテンツを持つメニュー項目のみが必要になります。