3

的訂購實體框架子項目我看到Ordering sub-items within ordered items in a Linq to Entities Query這表明,沒有辦法讓存儲庫以特定順序返回實體圖中的子項。EditorFor

如果這是正確的,有關如何訂購在EditorFor項目的任何想法?

//This works but returns a random order 
<%: Html.EditorFor(model => model.HPERDET.HORDERS) %> 


//This errors with "Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions." 
<%: Html.EditorFor(model => model.HPERDET.HORDERS.OrderBy(m=>m.APP_DATE)) %> 

//presorting the HORDERS into 
//a public IOrderedEnumerable<HORDER> SortedHorders { get; set; } 
//and ordering in my view model works, but breaks the binding because 
//the generated html inputs no longer have the correct hierarchical names 
<%: Html.EditorFor(model => model.SortedHorders) %> 

那麼,有沒有辦法,以便與EditorFor使用它們,而不訴諸組裝POCO對象複製EF的人,但在所有順序圖子實體排序?

回答

1

這是ViewModel的絕佳案例。 ViewModels包裝實體框架模型,並按照設計的View所要求的方式呈現數據。在ViewModel中執行排序並將EditFor綁定到自定義排序的屬性。

+0

我已經在使用ViewModel來傳遞額外的數據,但是由於EF返回值非常大,我試圖避免遍歷並複製到POCO對象中。當你說「包裝EF模型」時,你的意思是包裝或「複製內容,但調整爲顯示」:在這種情況下,我需要改變的是訂單,因此複製到我自己的類中對於好處是很昂貴的。 – Andiih 2010-08-28 18:57:38

+0

@Aniih,我想你試圖微觀優化。一般來說,您希望用戶在屏幕上使用的任何內容都不足以擔心複製。 – jfar 2010-08-29 14:29:37

+0

你可能是對的,但情況是我顯示一個大圖(樹)的信息崩潰,然後允許用戶選擇他們看到的信息與jQuery。也許我應該用AJAX來做到這一點,但將所有內容發送到一個子彈(它的內部網絡,因此傳輸帶寬不是問題)似乎是一個好主意。我試着複製一下,看看我怎麼樣。 – Andiih 2010-08-29 15:38:26