public SetViewModel GetSet(long id, bool loadTerms) { // Try to return an instance we already have, if possible. var existing = MySets.FirstOrDefault(s => s.ID == id) ?? FavouriteSets.FirstOrDefault(s => s.ID == id) ?? Groups.SelectMany(g => g.Sets).FirstOrDefault(s => s.ID == id); if (existing != null) { if (loadTerms && !existing.TermsLoaded) { LoadTerms(existing); } return(existing); } var si = cache.GetSet(id, loadTerms); if (si == null) { return(null); } bool starred = cache.GetFavourites().Any(x => x.ID == si.Value.ID); return(new SetViewModel(this, si.Value) { Starred = starred }); }