Возможно ли связать данные типа 0..1 с помощью RIA Services? - PullRequest
2 голосов
/ 15 декабря 2011

Я могу получить данные 1.0 с помощью RIA Services.

 var sFiltered = this.ObjectContext.Sequences.Include("Schedules").Include("Events")
                                    .Include("Events.EventFrames")
                                    .Include("Events.EventRules")
                                    .Include("Events.EventFrames.EventFramePlugins")
                                    .Include("Events.EventFrames.EventFramePlugins.EventFramePluginParameters")
                                    .Include("Events.EventFrames.EventFramePlugins.EventFramePluginContentItems")
                                    .Where(s => s.ID == schedule.SequenceID).FirstOrDefault();

Так что приведенный выше код прекрасно работает.

Проблема в том, что я хочу получить данные по ClientContentItemID [EventFramePlugins] из [ClientContentItemElements]

Пожалуйста, посмотрите на изображение ниже.Но то, что я не люблю делать, это использовать 1 дополнительный запрос от клиента WPF для получения этих данных.Поэтому идея состоит в том, чтобы использовать ВСЕ 1 запрос, чтобы получить ВСЕ данные, которые мне нужны.

DB Model

Спасибо !!!

1 Ответ

0 голосов
/ 15 декабря 2011

Я думаю, что следующий запрос вернет желаемый результат. в итоге он выбирает анонимный тип (ClientContentItemElementId, Sequence), который вы можете изменить, чтобы получить соответствующий результат. Тем не менее, я не тестировал сгенерированный sql, чтобы увидеть, является ли этот подход приемлемым вообще.

sequences.Include.....Where(s => s.ID == schedule.SequenceID).SelectMany(s => s.Events).SelectMany(e => e.EventFrames).SelectMany(ef => ef.EventFramePlugins)
    .SelectMany(efp => efp.EventFramePluginContents).SelectMany(efpc => efpc.ClientContentItems).
    SelectMany(cci => cci.ClientContentItemElemts).Where(ccie => ccie.ClientContentItemElementId == myValue).
    Select(
        ccie =>
        new
            {
                ccie,
                ccie.ClientContentItem.EventFramePluginContentItem.EventFramePlugin.EventFrame.Event.
            Sequence
            });  
...