我在azure上有数据库会议和会议。 Session是一个会议的外键。在前端我试图连接到这个数据库并获得具有特定会议的外键的会话,但是当我尝试这样做时,我遇到了以下问题
我的代码:
// 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异常
答案 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;
}