LINQ to Entities (Entity Framework) Присоединение и конфликт .Include - PullRequest
1 голос
/ 10 марта 2010

То, что я хочу сделать, кажется довольно простым. Я хочу выбрать нескольких работодателей и включить последние 6 квартальных записей данных, отсортированных по годам и по убыванию.

Рассмотрим выражение:

var query = from e in data.Employer.Include("EmployerQuarterly")
            where e.UIAccount == 22
            select e;

Я на правильном пути, потому что я получаю 7 записей работодателя, которые мне нужны, и у каждой из них есть все квартальные данные. Теперь все, что мне нужно сделать, это заказать эти данные и выбрать только первые 6 записей.

Это выражение выполняет порядок по, но не по пределу 6.

var query = from e in data.Employer.Include("EmployerQuarterly")
            from q in e.EmployerQuarterly
            where e.UIAccount == 22
            orderby q.Year descending, q.Quarter descending
            select e;

Запрос выше также имеет два нежелательных побочных эффекта. Теперь я получаю 208 записей, а не мои оригинальные 7, и больше не получаю никаких данных EmployerQuarterly!

Я не хочу жертвовать своей энергичной нагрузкой. То, что я прошу, возможно с L2E?

1 Ответ

6 голосов
/ 11 марта 2010

Нельзя ограничить отношения, потому что EF не будет загружать частично материализованную сущность.Поэтому, если вы хотите загрузить подмножество связанных данных, вам нужно проецировать на POCO, а не загружать объекты.Т.е.:

var query = from e in data.Employer
            where e.UIAccount == 22
            select new
            {
                Id = e.Id,
                Name = e.Name,
                // etc.
                Quarterlies = (from q in e.EmployerQuarterly
                               orderby q.Year descending, q.Quarter descending
                               select new
                               {
                                   Id = q.Id,
                                   // etc.
                               }).Take(6)
            };

Поскольку вы проецируете, вам больше не нужен Include().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...