ASP.net Core APP 02 – Pesquisa por produtos
O próximo passo é permitir que os usuários do nosso site utilizem a caixa de busca para procurar por produtos pela descrição dentro do banco de dados. Para isso vamos alterar nossa interface IProductService para incluir um novo método chamado GetAllByName(string name);
using System.Collections.Generic; using myshop.Models; namespace myshop.Services { public interface IProductService { List<Product> GetAll(); List<Product> GetAllByName(string name); } }

Agora devemos implementar o mesmo método dentro da classe ProductService para utilizando o Linq e uma instrução lambda, realizar a consulta no banco de dados Mongo mas filtrando pelo nome do produto.
using System; using System.Collections.Generic; using MongoDB.Driver; using myshop.Models; namespace myshop.Services { public class ProductService : IProductService { MongoClient con; IMongoDatabase db; public ProductService() { con = new MongoClient("mongodb://172.18.0.35:27017"); db = con.GetDatabase("dbwalter"); if(db.GetCollection<Product>("Products") == null) db.CreateCollection("Products"); } public List<Product> GetAll() { var collection = db.GetCollection<Product>("Products"); return collection.Find<Product>(p => true).ToList(); } public List<Product> GetAllByName(string name){ var collection = db.GetCollection<Product>("Products"); return collection.Find<Product>(p => p.Name.ToLower().Contains(name.ToLower())).ToList(); } } }

Então devemos modificar o código da nossa classe controller HomeController para que o método action Index receba um parâmetro chamado search do tipo String. Caso esse parâmetro possua valor, o novo método de consulta no banco deve ser executado:
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using myshop.Models; using myshop.Services; namespace myshop.Controllers { public class HomeController : Controller { private IProductService productService; public HomeController(IProductService productService) { this.productService = productService; } public IActionResult Index(String search) { IList<Product> listProducts = null; if(search == null){ listProducts = productService.GetAll(); }else{ listProducts = productService.GetAllByName(search); } return View(listProducts); } public IActionResult Privacy() { return View(); } [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); } } }

Para concluir devemos modificar o código do arquivo Views -> Home -> Index.cshtml para no campo de busca realizar a chamada da action index do HomeController através de um formulário. Observe que alteramos o tag input para colocar o name=”search” que é o nome do parâmetro que a action Index espera.
<div class="col-lg-6 col-sm-8"> @using (Html.BeginForm("Index","Home")){ <div class="input-group w-100"> <input type="text" class="form-control" style="width:55%;" placeholder="1" name="search"> <!--<select class="custom-select" name="category_name"> <option value="">All type</option><option value="codex">Special</option> <option value="comments">Only best</option> <option value="content">Latest</option> </select>!--> <div class="input-group-append"> <button class="btn btn-primary" type="submit"> <i class="fa fa-search"></i> </button> </div> </div> } </div> <!-- col.// -->

Agora execute a aplicação utilizando o comando dotnet run e utilize o campo de busca para fazer a consulta.