MobileServiceInvalidOperationException使用LINQ连接到Azure的Xamarin.Forms

时间:2016-12-16 13:22:39

标签: c# linq azure xamarin

我在azure上有数据库会议和会议。 Session是一个会议的外键。在前端我试图连接到这个数据库并获得具有特定会议的外键的会话,但是当我尝试这样做时,我遇到了以下问题

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&#34; Where&#34;),这将显示&#34; true&#34;。

即使我在问题字符串之后使用linq表达式,它们仍能正常工作。如果我使用where子句而不是列ConferenceId,它也适用于我。

P.S。在调试窗口中,我看到MSIOE异常

1 个答案:

答案 0 :(得分: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;
}