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.