public void UpdateLastPosition(Topic topic) { Topic topicParent = (Topic)topic.Parent; int? max = 0; SessionManager.DoWork(session => { max = session.Query <DB.Entities.Topic>().Where(t => t.TopicParent == topicParent.Id).Max(m => (int?)m.TopicOrder); DB.Entities.Topic obj = session.Get <DB.Entities.Topic>(topic.Id); obj.TopicOrder = max == null ? 0 : (int)max + 1; session.Update(obj); }); }
public static TopicCollection GetTopicCollection() { //Database database = new Database("PSCPortalConnectionString"); Topic root = null; TopicCollection result = null; DateTime start = DateTime.Now; SessionManager.Query(session => { List <DB.Entities.Topic> listTopics = session.Query <DB.Entities.Topic>().ToList(); Guid subId = SessionHelper.GetSession(SessionKey.SubDomain) == string.Empty ? Guid.Empty : new Guid(SessionHelper.GetSession(SessionKey.SubDomain)); SubDomain subDomain = new SubDomain { Id = subId }; Topic topicMaster = subDomain.GetTopic(); DB.Entities.Topic topic = session.Get <DB.Entities.Topic>(topicMaster.Id); root = new Topic { Id = topic.TopicId, Name = topic.TopicName, Description = topic.TopicDescription, PageId = topic.PageId }; result = new TopicCollection(root); if (topic.TopicId == Guid.Empty && subDomain.Id != Guid.Empty) { return; } Stack <DB.Entities.Topic> stack = new Stack <DB.Entities.Topic>(); stack.Push(topic); Dictionary <Guid, Topic> items = new Dictionary <Guid, Topic>(); items.Add(root.Id, root); while (stack.Count > 0) { DB.Entities.Topic first = stack.Pop(); List <DB.Entities.Topic> children = listTopics.Where(topic1 => topic1.TopicParent == first.TopicId).ToList(); foreach (var child in children.OrderBy(a => a.TopicOrder)) { stack.Push(child); Topic parent = items[first.TopicId]; Topic dir = new Topic { Id = child.TopicId, Name = child.TopicName, Description = child.TopicDescription, PageId = child.PageId, Rss = child.Rss }; items.Add(dir.Id, dir); result.Add(parent, dir); } } }); TimeSpan timeSpan = DateTime.Now - start; var totalSeconds = timeSpan.TotalSeconds; return(result); }