// Implemented "Filters Class" that builds filters and gives options of combining filter options Bin and Year. // See "Using the MongoDB C# v2 Driver" on Pluralsight by Wes Higbee. Module 2 Combining Filter Conditions public async Task <IEnumerable <Wine> > GetWinesAsync(WinesFilter filters) { var filterDefinition = filters.ToFilterDefinition(); var sortDefinition = filters.ToSortDefinition(); var findOptions = new FindOptions <Wine, Wine>() { Sort = sortDefinition }; var wines = await _wines.FindAsync(filterDefinition, findOptions).ConfigureAwait(false); return(await wines.ToListAsync().ConfigureAwait(false)); }
public async Task <ActionResult <IEnumerable <WineDto> > > GetWinesAsync(int year = 0, int bin = 0, string vineyard = "") { var winesFilter = new WinesFilter() { Year = year, Bin = bin }; if (!string.IsNullOrEmpty(vineyard)) { return(await GetWinesByVineyardAsync(vineyard).ConfigureAwait(false)); } else { var winesFromService = await _service.GetWinesAsync(winesFilter).ConfigureAwait(false); return(MapWinesToDto(winesFromService)); } //if (year == 0 && string.IsNullOrEmpty(vineyard)) //{ // var winesFromService = await _service.GetWinesAsync().ConfigureAwait(false); // return MapWinesToDto(winesFromService); //} //else //{ // return await (year == 0 ? GetWinesByVineyardAsync(vineyard) : GetWinesByYearAsync(year)); //} //async Task<ActionResult<IEnumerable<WineDto>>> GetWinesByYearAsync(int year) //{ // var winesFromService = await _service.GetWinesByYearAsync(year).ConfigureAwait(false); // return MapWinesToDto(winesFromService); //} async Task <ActionResult <IEnumerable <WineDto> > > GetWinesByVineyardAsync(string vineyard) { var winesFromService = await _service.GetWinesByVineyardAsync(vineyard).ConfigureAwait(false); return(MapWinesToDto(winesFromService)); } }
public async Task <IEnumerable <Wine> > GetWinesAsync(WinesFilter filters) { var filterDefinition = filters.ToFilterDefinition(); // Get a BsonDocumentSerializer needed by the Render function var wineSerializer = BsonSerializer.SerializerRegistry.GetSerializer <Wine>(); var serializerRegistry = new BsonSerializerRegistry(); try { var filterBsonDocument = filterDefinition.Render(wineSerializer, serializerRegistry); var year = filterBsonDocument?.Elements?.ToList().FirstOrDefault(e => e.Name == "year").Value?.AsInt32; var bin = filterBsonDocument?.Elements?.ToList().FirstOrDefault(e => e.Name == "bin").Value?.AsInt32; var vineyard = filterBsonDocument?.Elements?.ToList().FirstOrDefault(e => e.Name == "vineyard").Value?.AsString; if (!string.IsNullOrEmpty(vineyard)) { await GetWinesByVineyardAsync(vineyard).ConfigureAwait(false); } if (year > 0) { _wineList = _wineList.Where(w => w.Year == year)?.ToList(); } if (bin > 0) { _wineList = _wineList.Where(w => w.Bin == bin)?.ToList(); } } catch (Exception ex) { Console.WriteLine($"{ex.Message}, InnerExec Message: {ex.InnerException?.Message}"); } return(await Task.FromResult(_wineList).ConfigureAwait(false)); }