Сортировка коллекции отношений один-ко-многим - Entity Framework Codefirst - PullRequest
0 голосов
/ 08 сентября 2011

У меня есть модель сущностей codefirst, в которой есть две сущности, Город и Местность.Город имеет отношение один ко многим с Местностью.Вот как они связаны.

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

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

Теперь у меня есть код, который находит конкретный город и загружает населенные пункты для этого города.Я искал, чтобы отсортировать загруженные локальности по «имени», используя LINQ IQueryable что-то вроде этого

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

Когда я использую код выше, он выдает «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 по имени.Вместо этого я получаю Места, отсортированные по Id.

Любые идеи о том, как отсортировать «многогранную» связь «один ко многим»

1 Ответ

3 голосов
/ 08 сентября 2011

LINQ-запросы не изменяют исходную коллекцию. Вам нужно создать новый отсортированный City.Localities экземпляр:

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

Сортировка в памяти после загрузки родительской и дочерней коллекции.

И ваш первый фрагмент кода не работает, потому что вы не можете указать критерии сортировки или фильтрации в отчете о загрузке.

Вот еще один ответ с некоторыми замечаниями к той же проблеме: Entity Framework, MVC 3, OrderBy в LINQ To Entities

...