For example, the user entered the title of a publication, and marked the genres Action and Adventure, or the user did not enter any title, but want to see all the publications that fit into these genres. How can I do this search query?
My tables:
Publicacao
Generos
PublicacaoGenero(IdPublicacao e IdGenero)
Action:
public ActionResult Publicacoes(PesquisaPublicacoesViewModel viewModel = null)
{
if (viewModel == null)
{
PesquisaPublicacoesViewModel p = new PesquisaPublicacoesViewModel();
p.TodosOsGeneros = db.Generos.ToList();
p.PublicacoesSelecionadas = db.Publicacao.Where(x => x.Titulo.StartsWith(p.Titulo) && x.Aprovado).ToList();
return View(p);
}
viewModel.TodosOsGeneros = db.Generos.ToList();
if (string.IsNullOrEmpty(viewModel.Titulo))
{
viewModel.PublicacoesSelecionadas = db.Publicacao.Where(p => p.Aprovado).ToList();
}
else
{
viewModel.PublicacoesSelecionadas = db.Publicacao.Where(p => p.Titulo.StartsWith(viewModel.Titulo) && p.Aprovado).ToList();
}
return View(viewModel);
}
View:
@model AllFiction.ViewModels.PesquisaPublicacoesViewModel
@using(Html.BeginForm("Publicacoes","Publicacoes",FormMethod.Get))
{
@Html.TextBox("Titulo", null, new {id="txtTitulo" })
@Html.CheckBoxListFor(model => model.IdGenerosSelecionados,
model => model.TodosOsGeneros,
genero => genero.IdGenero,
genero => genero.Genero,
model => model.GenerosSelecionados)
}
@foreach (var p in Model.PublicacoesSelecionadas)
{
@p.Usuario1.NomeCompleto
@p.Titulo
}
ViewModel
public class PesquisaPublicacoesViewModel
{
public string Titulo { get; set; }
public IEnumerable<Publicacao> PublicacoesSelecionadas { get; set; }
public string[] IdGenerosSelecionados { get; set; }
public IList<Generos> TodosOsGeneros;
public IList<Generos> GenerosSelecionados;
}