public ListDetail Get(ListCriteria criteria) { using (var uow = UnitOfWorkFactory.Create <NovelContext>()) { var service = new ListService(uow); var detail = service.Get(criteria); // connector detail.Connectors = service.View <Connector>() .Where(w => w.IsDeleted == false && w.ConnectorType == R.ConnectorType.SERIES_USERLIST) .Where(w => w.TargetID == detail.ID).ToList(); // series var listSeriesIDs = detail.Connectors.Select(s => s.SourceID).ToList(); detail.Series = new SeriesService(uow).Search(new SearchModel <SeriesCriteria> { Criteria = new SeriesCriteria { IDs = listSeriesIDs }, PagedListConfig = new PagedListConfig { PageSize = int.MaxValue } }).Data; // releases detail.Releases = service.View <Release>().Where(w => listSeriesIDs.Contains(w.SeriesID)).ToList(); // user reads var releaseIDs = detail.Releases.Select(s => s.ID); detail.Reads = service.View <UserRead>().Where(w => w.UserID == criteria.ByUserID) .Where(w => w.SourceTable == R.SourceTable.RELEASE) .Where(w => releaseIDs.Contains(w.SourceID)).ToList(); return(detail); } }
public IList <UserList> GetListHasReleases(ListCriteria criteria) { using (var uow = UnitOfWorkFactory.Create <NovelContext>()) { var qList = uow.Repository <UserList>().Where(w => w.IsDeleted == false && w.UserID == criteria.ByUserID && w.IsNotifyOfNewRelease); var qConnector = uow.Repository <Connector>().Where(w => w.IsDeleted == false && w.ConnectorType == R.ConnectorType.SERIES_USERLIST); var qRelease = uow.Repository <Release>().Where(w => w.IsDeleted == false && w.SeriesID > 0); var qRead = uow.Repository <UserRead>().Where(w => w.UserID == criteria.ByUserID && w.SourceTable == R.SourceTable.RELEASE); var seriesList = qList.Join(qConnector, l => l.ID, c => c.TargetID, (l, c) => new { l.ID, l.Name, SeriesID = c.SourceID }); var allReleases = qRelease.Join(seriesList, r => r.SeriesID, l => l.SeriesID, (r, l) => new { r.ID, r.Date, UserListID = l.ID, l.Name, r.SeriesID }); var readReleases = qRead.Join(allReleases, r => r.SourceID, rl => rl.ID, (r, rl) => rl).GroupBy(g => new { g.SeriesID }).Select(s => new { s.Key.SeriesID, Date = s.Max(m => m.Date) }); var untouchReleases = allReleases.Where(w => !readReleases.Any(w2 => w2.SeriesID == w.SeriesID)) .GroupBy(g => new { g.SeriesID }) .Select(s => new { s.Key.SeriesID, Date = DateTime.MinValue }); // only return releases that has been read once var unreadReleases = readReleases.Union(untouchReleases).SelectMany(s => allReleases.Where(w => (w.SeriesID == s.SeriesID && w.Date > s.Date))).ToList(); return(unreadReleases.GroupBy(g => new { g.UserListID, g.Name }).Select(s => new UserList { ID = s.Key.UserListID, Name = s.Key.Name, Type = s.Count(), UpdatedDate = s.Max(m => m.Date) }).ToList()); } }
public ActionResult Detail(ListCriteria criteria) { criteria.ByUserID = UserSession.UserID; var detail = Facade <ListFacade>().Get(criteria); return(View(detail)); }
public ActionResult Index(ListCriteria criteria) { var searchModel = CreateSearchModel(criteria); var pagedList = Facade <ListFacade>().Search(searchModel); ViewBag.ListTemplates = Facade <ListFacade>().GetListTemplates(); return(View(pagedList)); }
public ActionResult Public(ListCriteria criteria) { var searchModel = CreateSearchModel(criteria); criteria.ByUserID = 0; criteria.IsPublic = true; // get public list only var pagedList = Facade <ListFacade>().Search(searchModel); return(View(pagedList)); }
public ListDetail Get(ListCriteria criteria) { var qUserList = View <UserList>().All(); var userList = qUserList.SingleOrDefault(w => w.ID == criteria.IDToInt); if (userList == null) { return(null); } var listDetail = new ListDetail(); MapProperty(userList, listDetail); return(listDetail); }
private void DataPortal_Fetch(ListCriteria criteria) { using (SqlConnection cn = new SqlConnection(Database.ConnectionString)) { cn.Open(); using (SqlCommand cm = cn.CreateCommand()) { cm.CommandType = CommandType.StoredProcedure; cm.CommandText = "[app_member].[visit_list_by_stringlist]"; cm.Parameters.AddWithValue("@list", criteria.Lists); using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) { IsReadOnly = false; while (dr.Read()) { this.Add(new VisitReportInfo(dr)); } IsReadOnly = true; } } } }