Проблема с RIA Services и лямбда-оператором JOIN - PullRequest
1 голос
/ 02 августа 2011

ПРИМЕЧАНИЕ: ответ на этот вопрос повторяется в комментарии ниже.

У меня проблемы с тем, чтобы RIA Services вернула мне необходимые данные, но не больше, чем мне нужно. У меня есть родительский объект (проект), который содержит несколько детей. Один - это Компонент (один Компонент на Проект). Другим является Участник проекта, который должен быть ограничен в зависимости от Участника, и мне также нужно получить информацию о Персонале (связанную с Участником проекта).

Вот код, который я пробовал ранее:

public IQueryable<IMSModel.Project> GetProjectHierarchy(String id)
    {

        return this.ObjectContext.Projects
                .Include("Component")
                .Include("ProjectParticipants")
                .Include("ProjectParticipants.Person")
                .Where(p => p.Program.ProgramType.lookupName == "EVDBE" &&
                    p.ProjectOrgs.Any(po => po.orgId == id) &&
                    p.ProjectParticipants.Any(pp => (pp.postId == id)) &&
                    p.ProjectParticipants.Any(pp => pp.PersonStatus.lookupName == "A") &&
                    p.ProjectParticipants.Any(pp => pp.ParticipantRole.participantInd == "Y"))
                .OrderBy(p => new { p.fiscalYear, p.title })
                .OrderByDescending(p => p.fiscalYear);


    }

Это не так уж плохо работает, но я получаю объекты ProjectParticipant, которые мне не нужны. Что я действительно хочу сделать, так это ограничить объекты ProjectParticipant теми объектами, которые имеют ParticipantRole.participantInd == "Y".

Я попробовал другой возможный синтаксис для этого, а именно:

public IQueryable<IMSModel.Project> GetProjectHierarchy(String id)
    {

        return this.ObjectContext.Projects
            .Include("Component")
            .Join(this.ObjectContext.ProjectParticipants
                .Include("ProjectParticipants.Person")
                .Where(
                    pp => pp.ParticipantRole.participantInd == "Y" &&
                    pp.postId == id &&
                    pp.PersonStatus.lookupName == "A"
            )

            , p => p.id
            , pp => pp.projectId
            , (p, pp) => p )
            .Where(p => p.Program.ProgramType.lookupName == "EVDBE" 
                && p.ProjectOrgs.Any(po => po.orgId == id));

    }

Я бы подумал, что это вернет что-то намного ближе к тому, что я мог бы хотеть. Единственная проблема заключается в том, что я ничего не возвращаю в своем иерархическом древовидном представлении. Что-то было возвращено, так как для каждой записи были созданы пустые места, но мои привязки не отображают никакой информации. Привязки для первого примера действительно показывают данные, тогда как привязки для второго (более ограниченный набор результатов, поскольку я не использую Any ()) не показывают данные.

Я бьюсь головой об эту уже довольно давно и не могу решить. Любая помощь будет великолепна.

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