2016-12-16 1 views
0

데이터베이스에 회의 및 세션이 있습니다. 하나의 회의에 세션에 외래 키가 있습니다.MobileServiceInvalidOperationException Xamarin.Forms가 LINQ를 사용하여 Azure에 연결 중

: 프런트 엔드에서 문제

Exception

내 코드 나는이 데이터베이스에 연결하고 특정 회의에 외래 키와 세션을 얻기 위해 노력하고있어,하지만 난이 일을하려고 할 때, 나는 다음과 같은 얻을

// Return Sessions of the current conference 
    public async Task<ObservableCollection<Session>> GetSessionsAsync(Conference currentConference, bool syncItems = false) 
    { 
     try 
     { 
      IEnumerable<Session> sessions = await sessionTable 
//problem is here   .Where(s => s.ConferenceId == currentConference.Id) 
          .ToEnumerableAsync(); 
      return new ObservableCollection<Session>(sessions); 
     } 
     catch (MobileServiceInvalidOperationException msioe) 
     { 
      Debug.WriteLine(@"MSIOE exception: {0}", msioe.Message); 
     } 
     catch (Exception e) 
     { 
      Debug.WriteLine(@"Some exception: {0}", e.Message); 
     } 
     return null; 
    } 

가장 흥미로운 점은 내가 문제 문자열 후

Debug.WriteLine(sessions.First().ConferenceId == currentConference.Id); 

를 작성하는 경우,이 "트루 표시됩니다 (이"어디 "LINQ없이 작동)이다 이자형".

문제 문자열 뒤에 linq 표현식을 사용하더라도 잘 작동합니다. 그리고 where 절을 열 ConferenceId과 함께 사용하지 않으면 나에게도 적합합니다.

P. 디버그 창에서 MSIOE 예외가 표시됩니다.

답변

0

Linq to Entities 쿼리를 수행 할 때 쿼리 자체 내에서 속성 접근 자의 사용을 최소화하기 위해 일반적으로 좋습니다. 이 시도.

public async Task<ObservableCollection<Session>> GetSessionsAsync(Conference currentConference, bool syncItems = false) 
{ 
    try 
    { 
     var conferenceId = currentConference.Id; 
     IEnumerable<Session> sessions = await sessionTable 
         .Where(s => s.ConferenceId == conference.Id) 
         .ToEnumerableAsync(); 
     return new ObservableCollection<Session>(sessions); 
    } 
    catch (MobileServiceInvalidOperationException msioe) 
    { 
     Debug.WriteLine(@"MSIOE exception: {0}", msioe.Message); 
    } 
    catch (Exception e) 
    { 
     Debug.WriteLine(@"Some exception: {0}", e.Message); 
    } 
    return null; 
} 
관련 문제