EF получить конкретные связанные объекты - PullRequest
0 голосов
/ 10 ноября 2011

В моем хранилище EF есть коллекция объектов с именем Territories. Territory связан со многими Distributions, и у каждого Distribution есть один CycleID.

Как мне написать запрос к EF, который будет захватывать все Territory объекты и связанные Distributions, принадлежащие определенному Cycle, игнорируя любые Territories, которые не имеют квалифицирующего Distributions?

Я представляю что-то вроде:

return this.entities.Territories
    .Include("Distributions")
    .Include("Reps")
    .Where(e => e.Distributions.Any(d => d.CycleID == CycleID))
    .OrderBy(e => e.TerritoryName)
    .AsEnumerable();

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

Ответы [ 2 ]

1 голос
/ 10 ноября 2011

Похоже, вы выбрали неправильную точку входа в свой граф объектов. Начните с того, что вы знаете (конкретный Cycle) и вернитесь к элементам, которые вы хотите получить (Distributions и Territories).

var cycle = this.entities.Cycles.Single(c => c.CycleID == cycleID);

return cycle.Include("Distributions")
    .Include("Territories")
    .Include("Territories.Reps");

В зависимости от того, как вы используете результат, вы можете преобразовать его в Enumerable<Territory>

return cycle.Distributions.SelectMany(d => d.Territories)
    .OrderBy(t => t.TerritoryName)
    .AsEnumerable();

Возможно, вам придется поиграться с операторами Include, потому что мой EF немного ржавый.

0 голосов
/ 10 ноября 2011

Попробуйте это:

var entities = new TestEntities();
        var cycleId = 1;
        var filteredDistributions = entities.Territories
                                    .Join(entities.Distributions.Where(d => d.CycleId == cycleId),
                                          territory => territory.Id,
                                          distribution => distribution.Territory.Id,
                                          (territory, distribution) => distribution);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...