示例#1
0
        public AppTrackQuery Retrieve(AppTrackQuery query) {
            List<IMongoQuery> mongoQueries = new List<IMongoQuery>();

            mongoQueries.Add(Query.EQ("user", query.User));

            if (query.Status.HasValue) {
                mongoQueries.Add(Query.EQ("status", query.Status.Value));
            }

            if (query.RelatedApps != null) {
                mongoQueries.Add(Query.In("app", BsonArray.Create(query.RelatedApps)));
            }

            AppTrack[] result = appTracks.Find(Query.And(mongoQueries.ToArray()))
                .SetSkip(query.SkipSize)
                .SetLimit(query.TakeSize)
                .ToArray();

            // 填上App的全部信息
            BsonArray idx = BsonArray.Create(result.Select(t => t.App.Id));
            Dictionary<int, AppBrief> relatedApps = apps.Find(Query.In("_id", idx))
                .SetFields("brief")
                .ToDictionary(a => a.Id, a => a.Brief);
            foreach (AppTrack track in result) {
                if (relatedApps.ContainsKey(track.App.Id)) {
                    track.App = relatedApps[track.App.Id];
                }
            }

            query.Fill(result);

            return query;
        }
示例#2
0
        private ICollection<TrackingApp> RetrieveTrackingApps(AppUpdateType updateType, int size = 9) {
            AppListQuery appQuery = new AppListQuery() {
                UpdateType = updateType,
                PageIndex = 1,
                PageSize = size
            };
            appQuery = Repository.App.Search(appQuery);

            if (User.Identity.IsAuthenticated) {
                AppTrackQuery trackQuery = new AppTrackQuery() {
                    PageIndex = 1,
                    PageSize = appQuery.Result.Count,
                    User = CurrentUser.Id,
                    RelatedApps = appQuery.Result.Select(a => a.Id)
                };
                ICollection<AppTrack> tracks = Repository.AppTrack.Retrieve(trackQuery).Result;

                return new TrackingAppQuery(appQuery, tracks).Result;
            }
            else {
                return appQuery.Result.Select(a => new TrackingApp(a, null)).ToArray();
            }
        }
示例#3
0
 public AppTrackQuery Retrieve(AppTrackQuery query) {
     throw new NotImplementedException();
 }