2011-12-15 2 views
2

RIA 서비스로 1..0 데이터를 얻을 수 있습니다.RIA Services를 통해 0..1 데이터와 연결할 수 있습니까?

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]에서 아래의 이미지에서 참조하시기 바랍니다하여 데이터를 얻을 할 것입니다. 하지만 내가 싫어하는 것은이 데이터를 얻기 위해 WPF 클라이언트로부터 1 개의 추가 요청을 사용하는 것입니다. 그래서 아이디어는 내가 필요한 모든 데이터를 얻기 위해 1 개의 요청을 사용하는 것입니다.

DB Model

감사합니다!

답변

0

다음 쿼리는 원하는 결과를 반환한다고 생각합니다. 최종적으로 적절한 결과를 얻기 위해 변경할 수있는 익명 형식 (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 
      }); 
+0

안녕하세요! 단서를 가져 주셔서 감사합니다! 하지만 당신의 접근 방식으로 느슨한 .Include ("Events.EventRules")와 나는 당신이 제안한 것처럼 "myValue"가 없다. 나는 그것을 사용할 수 없다. 어쨌든 고마워! –

+0

@DmitryBoyko : 네 말이 맞아. 한 DB 호출에서 모든 작업을 수행 할 수 있는지 궁금합니다. 솔루션을 찾은 경우, 공유하면 고맙겠습니다. – Kamyar

+1

음 ... RIA Services에서 View Class를 만들고 클래식 LINQ 방식으로 채우기로 결정했습니다. –

관련 문제