我正在使用PredicateBuilder和LINQKit構建相當複雜的動態查詢。模型結構看起來有點像實體框架OrderBy On已加入集合
MediaGallery (one-to-many) MediaGalleryItems (one-one) MediaItems
我渴望加載這整個關係,該部分工作正常。
每個MediaGalleryItem都有一個'Order'屬性,它允許庫中的項目具有特定的順序。我需要排序依據這一點,讓我有種想要做的:
IQueryable<MediaGallery> query = ...
... lots of stuff ...
query = query.OrderBy(m => m.MediaGalleryItems.Order)
但顯然是不會工作的MediaGalleryItems是MediaGalleryItem對象的集合。我也試過
query = query.OrderBy(m => m.MediaGalleryItems.OrderBy(mgi => mgi.SortOrder));
編譯但不起作用。它似乎應該很容易,我錯過了明顯的東西?
編輯:我應該說我限制到一個單一的MediaGallery,所以如果我是手寫SQL它可能是有意義的做這樣的事情,以減少DB人次。 Joachim Isaksson的評論正確地指出,如果您不是首先通過MediaGallery.Id訂購,這可能會導致多個MediaGallery混亂。
我想我的問題是,有什麼辦法強迫Linq輸出我在這裏需要的SQL,還是應該讓我自己輕鬆一下,然後再次訪問數據庫?
你真的不能用一個集合命令,這將是MediaGalleries的預期順序如果MediaGallery1有2個項目與順序1和4,而MediaGalley2訂單2和3有2個項目? – 2012-01-27 11:08:38
好點,謝謝。不過,我應該說我選擇了一個MediaGallery,所以在這種情況下,爲了減少數據庫行程似乎是合理的。如果這是不可能的,我可以理解爲什麼要考慮更廣泛的圖景。 – NickH 2012-01-27 11:15:33
'query'是什麼?它是一個'MediaGallery'集合?請發佈樣本數據和預期結果。也許你正在尋找'firstordefault'? – danihp 2012-01-27 11:22:41