当的NullReferenceException获取最新主题和回复对于论坛中用户俱乐部

StackOverflow https://stackoverflow.com/questions/4014775

  •  26-09-2019
  •  | 
  •  

我想查询组论坛(论坛?)用户俱乐部获得这些论坛的最新主题和回复。这是我使用的代码:

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日,点击 有没有在这里需要考虑一个“安全环境”?即,查询需要在具有到所有论坛完整访问权的用户的上下文中运行?

有帮助吗?

解决方案 2

此将该溶液(作为发现我的同事)是:

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条款我猜的)。

其他提示

尝试使用EPiServer.Community.Forum.ForumHandler.GetQueryResult()和其过载。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top