0

我有一個codefirst實體模型,它有兩個實體City和Locality。城市與地方有一對多關係。這是他們是如何相關的。排序一對多關係集合 - 實體框架Codefirst

public class City { 
    public virtual List<Locality> Localities { get; set; } 
} 

public class Locality { 
    public virtual City City { get; set; } 
} 

現在我有一些代碼找到一個特定的城市,並加載該城市的地方。我一直在尋找使用這樣

city = context.Cities.AsNoTracking().Include(c => c.Localities.OrderBy(l => l.Name)) 
            .Where(c => c.Id == id).FirstOrDefault(); 

LINQ IQueryable的東西當我使用上面的代碼拋出「的ArgumentException」由「名」所裝載的地點進行排序。所以我嘗試了下面顯示的代碼。

city = context.Cities.AsNoTracking().Include(c => c.Localities) 
            .Where(c => c.Id == id).FirstOrDefault(); 
if (city != null) { 
    city.Localities.OrderBy(l => l.Name); 
} 

上述代碼不會拋出任何異常,但不會按名稱對Localities進行排序。我得到Localities按Id排序。

任何想法如何的一個一對多的關係

回答

3

LINQ查詢「多面」進行排序不修改的源集合。您需要創建一個新的排序City.Localities例如:

if (city != null) { 
    city.Localities = city.Localities.OrderBy(l => l.Name).ToList(); 
} 

這個排序在內存中的父母和孩子收集加載後。

而您的代碼第一個代碼段不起作用,因爲您無法在預先加載語句中指定排序或過濾條件。

這裏是另一個答案與一些言論,同樣的問題:Entity Framework, MVC 3, OrderBy in LINQ To Entities

+1

Slauma,你是對極了。我修改了我的代碼以包含您的建議,現在我得到了一個已排序的本地化集合。謝謝。 – Jatin