我有一個場景,我需要在EF模型中的用戶實體的導航屬性的列上進行排序。按實體的導航屬性的字段排序 - Linq到實體
的實體: 用戶 - >國家1:n的關係
一個簡單的SQL查詢將是如下:
SELECT UserId, u.Name, c.Name
FROM users u join countries c on u.CountryId = c.CountryId
ORDER BY c.Name asc;
於是我試圖複製使用LINQ上述SQL查詢實體如下 - (延遲加載啓用)
entities.users.OrderBy(field => field.country.Name).ToList();
但是這查詢不返回我的國家進行了名稱排序爲原生SQL查詢博夫呢。
但我繼續多一點,做了以下內容:
var enumeratedUsers = entities.users.AsEnumerable();
users = enumeratedUsers.OrderBy(fields => fields.country.Name).ToList();
但訂購enumeratedUser對象上約50個記錄約了。 7秒
有沒有更好的方式如何省略Enumerable並且不返回匿名類型?
感謝
編輯
我剛纔忘了說,EF供應商是一個MySQL的一個不是MS SQL。事實上,我只是在MS SQL中的複製數據庫上嘗試相同的查詢,並且查詢工作正常,即國家名稱的順序是正確的,所以它看起來像除了從MySQL獲取結果集並執行順序外沒有其他選擇來自可枚舉對象上的內存
您沒有匿名類型。您的案例中的var關鍵字只是隱藏IEnumerable類型,其中TEntity是您的用戶實體類型。 entities.users是一個EntityCollection(如果我理解你的EF模型的權利)已經實現了IEnumerable,所以你可以安全地使用entities.users.OrderBy(f => f.country.Name).ToList();然而,就像丹尼斯說的那樣,你必須包含所有想要的實體關聯。 –
但是,不會返回不幸的縣名排序 – Ryan
嘗試看看你是否能從這個鏈接得到任何東西。 http://thejoyofcode.com/Sorting_associations_in_the_Entity_Framework.aspx –