我尝试使用C#和实体框架从我的数据库中获取数据。我的问题是我有一个递归数据模型,称为“模板”,它有一个属性,称为“模板”,这是一个“模板”的ICollection。在我的查询中,我有一个.Select(PageMappings.PageMapping)
。PageMapping是一个表达式树。最终它会转到一个表达式树,称为“模板Map”。如以下代码所示,此表达式树是递归的。
public static readonly Expression<Func<Data.Entities.Components.Layout.Template, Models.Components.Layout.Template>> TemplateMapping =
tp => new Models.Components.Layout.Template()
{
Title = tp.Title ?? string.Empty,
Id = tp.HtmlId ?? string.Empty,
Name = tp.Name ?? string.Empty,
Alt = tp.Alt ?? string.Empty,
//TODO Create mapping for the classes and styles
Classes = tp.Classes.FormatStringToList(),
Styles = tp.Styles.FormatStringToList(),
Segments = (List<Segment>)new List<Segment>()
.Concat(tp.Templates.AsQueryable().Select(TemplateMapping))
.Concat(tp.Rows.AsQueryable().Select(RowMapping)).ToList()
};
不知何故,它会继续在TemplateMapping内部调用TemplateMapping,即使“模板”的ICollection内部没有一个“模板”。
我试着添加一个.Where(x => x.Templates != null)
。但这没有什么区别。
当“模板”中没有“模板”时,我如何添加一个子句来结束TemplateMapping的递归性?
1条答案
按热度按时间uoifb46i1#
谢谢你的建议!它使我从不同的Angular 看待这个问题。
我试着将它Map到查询中的一个不同的对象。这一直在工作,直到它到达“TemplateMapping”代码的递归部分。我想这会使代码很好很干净。它看起来很干净,但它没有工作。
在我的工作版本中,我等待数据。之后我按照我想要的方式Map它。
我不会把工作代码在这里,因为它几乎300行。