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