2011-03-30 39 views
0

例如:如何訂購在LINQ拉姆達父類的底層子集合

_ctx.DataContext.Set<ParentClass>().Include("ChildCollection").OrderBy(...) 

每次我把排序依據子句中Lambda表達式我無法訪問性能斷ChildCollection屬性,我希望底層的子集合被排序。我不想讓父類按任何特定列排序。

如何使用LINQ/Lambda表達式實現此目的?似乎它應該很容易!

+0

可能重複([如何與實體與ADO.NET實體框架預先加載排序] http://stackoverflow.com/questions/996438/how-to-sort相關的實體與熱切加載在ado網絡實體框架) – 2011-03-30 19:07:24

回答

1

預先加載無法訂購導航屬性。您必須使用這樣的事情:

var query = _ctx.DataContext 
       .Set<ParentClass>() 
       .Select(p => new 
        { 
         Parent = p, 
         Childs = p.ChildCollection.OrderBy(c => c.Something) 
        }); 
+0

嗨,我有你的例子解決方案的大問題。 1)我需要從我的存儲庫中返回一個非匿名類型。 2)底層集合是IList類型的,因此當從IOrderedEnumerable轉換時似乎會陷入困境。爲此奮鬥...... – jaffa 2011-03-30 14:24:06

+0

在這種情況下,您必須定義新類型,因爲我知道投影不能填充實體類型。 – 2011-03-30 14:26:05

+0

是有序的enumerable不能放在列表中。您必須在自定義類型中具有「IOrderedEnumerable」屬性。 – 2011-03-30 16:28:54