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; }
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(); } }
public AppTrackQuery Retrieve(AppTrackQuery query) { throw new NotImplementedException(); }