2010-10-25 19 views
0

我試圖查詢用戶俱樂部的論壇集(論壇?)以獲得最新的主題和回覆在這些論壇中。這是我使用的代碼:NullReferenceException當獲取用戶俱樂部中的論壇的最新主題和回覆

RoomCollectionCriterion userClubRoomsCollection = new RoomCollectionCriterion(); 

foreach (Club userClub in userClubCollection) 
{ 
    RoomCriterion userClubRoomCriterion = new RoomCriterion(); 
    userClubRoomCriterion.ID = new IntegerCriterion(); 
    userClubRoomCriterion.ID.Value = userClub.ForumRoom.ID; 

    userClubRoomsCollection.Criteria.Add(userClub.Name, userClubRoomCriterion); 
} 

TopicQuery topicQuery = new TopicQuery(); 

topicQuery.Room = new RoomCriterion(); 
// Pass in our collection of the user's clubs to the query 
topicQuery.Room.Rooms = userClubRoomsCollection; 

MessageCollection topics = QueryHandler.GetQueryResult<EPiServer.Community.Forum.Topic, MessageCollection>(topicQuery, pageNumber, 2); 
MessageCollection replies = QueryHandler.GetQueryResult<EPiServer.Community.Forum.Topic, MessageCollection>(topicQuery, pageNumber, 4); 

我的問題是,每次我打第一個電話到GetQueryResult的時候,我得到一個NullReferenceException。我無法看到任何錯誤/遺漏了我傳遞給GetQueryResult的內容,但我希望其他人已經完成了此操作,並可以爲此提出修復建議。

更新26/10/2010
正如馬格努斯建議我換了我QueryHandler.GetQueryResult用於向ForumHandler.GetQueryResult呼叫,但這似乎並沒有已產生了效果。我還下調了參數GetQueryResult讓自己的代碼行現在是:

MessageCollection topics = ForumHandler.GetQueryResult(topicQuery); 

但這仍然給我一個NullReferenceException。這對我意味着問題不在我調用的處理程序的GetQueryResult方法中,它在topicQuery對象中,因爲這是迄今保持不變的事情。我想知道如果我錯過了需要在TopicQuery對象上設置的屬性。

更新2010年4月11日
是否存在需要考慮的「安全上下文」?即查詢需要在可以完全訪問所有論壇的用戶的情況下運行?

回答

0

解決這個(如發現我的同事)是:這裏

TopicQuery topicQuery = new TopicQuery(); 

//For latest topics we want to sort by the topics creation date. 
topicQuery.CreateDate = new DateTimeCriterion(); 
topicQuery.Room = new RoomCriterion(); 
topicQuery.Room.ID = new IntegerCriterion(); 
//We want to include several roomIDs 
topicQuery.Room.ID.Includes = new IntegerInCriterion(); 

//For each club, get its ForumRoom 
foreach (Club userClub in userClubCollection) 
{ 
    topicQuery.Room.ID.Includes.Values.Add(userClub.ForumRoom.ID); 
} 

//Sorting of results 
CriterionSortOrder critSort = new CriterionSortOrder(topicQuery.CreateDate, EPiServer.Common.Sorting.SortingDirection.Descending); 

//Add sorting to query 
topicQuery.OrderBy.Add(critSort); 

MessageCollection topics = QueryHandler.GetQueryResult<EPiServer.Community.Forum.Topic, MessageCollection>(topicQuery, 1, 2); 
topicQuery.OrderBy.Remove(critSort); 

//For Latest replies we want to sort topics by LastReply.CreateDate. Therefore we add this. 
topicQuery.LastReply = new ReplyCriterion(); 
topicQuery.Replies = new ReplyCollectionCriterion(); 
topicQuery.Replies.Count = new IntegerCriterion(); 
topicQuery.Replies.Count.Operator = ComparisonOperator.GreaterThan | ComparisonOperator.Equals; 
topicQuery.Replies.Count.Value = 1; 
topicQuery.LastReply.CreateDate = new DateTimeCriterion(); 
CriterionSortOrder critSort2 = new CriterionSortOrder(topicQuery.LastReply.CreateDate, EPiServer.Common.Sorting.SortingDirection.Descending); 

topicQuery.OrderBy.Add(critSort2); 
MessageCollection replies = QueryHandler.GetQueryResult<EPiServer.Community.Forum.Topic, MessageCollection>(topicQuery, 1, 4); 

lvMyEntries.DataSource = topics; 
lvMyEntries.DataBind(); 
lvMyReplies.DataSource = replies; 
lvMyReplies.DataBind(); 

的關鍵似乎是,我從我的名字推斷允許你提交一組使用IntegerInCriterion的在條件中的查詢中使用整數(如我猜想的SQL IN子句)。

1

嘗試使用EPiServer.Community.Forum.ForumHandler.GetQueryResult()及其重載。

+0

沒有快樂。我換出了我的一行'MessageCollection topics = EPiServer.Community.Forum.ForumHandler.GetQueryResult(topicQuery,pageNumber,2);'但我得到了相同的NullReferenceException :-( – PhilPursglove 2010-10-25 16:09:32