我收到以下代码的堆栈溢出。我知道问题是什么,它执行了所有“GetAllPages”
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)
};
}
我该如何正确地做到这一点?
更新:代码背后的原因是,我有一个树形结构的菜单,其中一个菜单项可以有 0 到多个子项。可以跳过语言部分,但我的网站支持多种语言,并且使用语言参数我只希望菜单项具有给定语言的内容。