我正在嘗試使用 C# 和物體框架從我的資料庫中獲取資料。我的問題是我有一個名為“模板”的遞回資料模型,它有一個名為“模板”的屬性,它是“模板”的 ICollection。在我的查詢中,我有一個.Select(PageMappings.PageMapping). PageMapping 是一個運算式樹。最終它進入一個名為“TemplateMapping”的運算式樹。這個運算式樹是遞回的,你可以在下面的代碼中看到。
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()
};
即使“模板”的 ICollection 中沒有單個“模板”,它也會以某種方式繼續在 TemplateMapping 內部呼叫 TemplateMapping。
我嘗試添加一個.Where(x => x.Templates != null). 但這并沒有什么不同。
當“模板”中沒有“模板”時,我如何添加一個終止模板映射遞回性的子句?
uj5u.com熱心網友回復:
謝謝你的建議!這讓我從不同的角度看待問題。
我嘗試將它映射到查詢內的不同物件。這一直有效,直到它到達“模板映射”代碼的遞回部分。我認為這會使代碼變得干凈整潔。它看起來很干凈,但它不起作用。
在我的作業版本中,我等待資料。之后我按照我想要的方式映射它。
我不會把作業代碼放在這里,因為它有將近 300 行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/532865.html
標籤:C#实体框架林克表达式树
