Consulta Por Nome

Bom dia Comunidade.
Estou precisando da ajuda de vocês. Estou desenvolvendo um programa para um curso de idiomas, mas não estou conseguindo fazer uma “consulta por nome”. O software foi desenvolvido em camadas Web, Dal, Bll e DTO, com o framework Dapper. A classe Aluno tem as seguintes chaves estrangeiras => Curso, Turma, Turno e Nível. Abaixo os dados. Obrigado pela ajuda.

DAL

//Método para consultar todos os registros
public List<AlunoDTO> ListarTodos()
{
	using (SqlConnection conn = new SqlConnection(connectionString))
	{
		string query =
			"Select * From Aluno a "
			+ "inner join Curso c on c.IdCurso = a.IdCurso "
			+ "inner join Turma t on t.IdTurma = a.IdTurma "
			+ "inner join Turno tur on tur.IdTurno = a.IdTurno "
			+ "inner join Nivel n on n.IdNivel = a.IdNivel "
			+ "inner join Funcionario f on f.IdFuncionario = a.IdFuncionario "
			+ "inner join Responsavel r on r.IdResponsavel = a.IdResponsavel "
			+ "order by IdAluno";
		
		return conn.Query(query, (AlunoDTO a, CursoDTO c, TurmaDTO t, TurnoDTO tur, NivelDTO n, FuncionarioDTO f, ResponsavelDTO r) =>
		{
			a.Curso = c;  //Mapeando a associação
			a.Turma = t;  //Mapeando a associação
			a.Turno = tur;  //Mapeando a associação
			a.Nivel = n;  //Mapeando a associação
			a.Funcionario = f;  //Mapeando a associação
			a.Responsavel = r; //Mapeando a associação
			return a;  //Tipo que será retornado pela query
		},
		splitOn: "IdCurso, IdTurma, IdTurno, IdNivel, IdFuncionario, IdResponsavel"  //FK -> Chaves estrangeiras
		).ToList();
	}
}

//Método para consultar todos os registros por nome
public List<AlunoDTO> ListarTodosPorNome(string nome)
{
	using (SqlConnection conn = new SqlConnection(connectionString))
	{
		string query =
			"Select count(Nome) From Aluno a "
			+ "inner join Curso c on c.IdCurso = a.IdCurso "
			+ "inner join Turma t on t.IdTurma = a.IdTurma "
			+ "inner join Turno tur on tur.IdTurno = a.IdTurno "
			+ "inner join Nivel n on n.IdNivel = a.IdNivel "
			+ "where Nome = @Nome";
		
		return conn.Query(query, (AlunoDTO a, CursoDTO c, TurmaDTO t, TurnoDTO tur, NivelDTO n) =>
		{
			a.Curso = c; //Mapeando a associação
			a.Turma = t; //Mapeando a associação
			a.Turno = tur; //Mapeando a associação
			a.Nivel = n; //Mapeando a associação
			return a; //tipo que será retornado pela query
		},
		new { Nome = $"%{nome}%" }, splitOn: "IdCurso, IdTurma, IdTurno, IdNivel" //FK -> Chaves estrangeiras
		).ToList();
	}
}

BLL

public class AlunoBLL
{
	public void CadastrarAluno(AlunoDTO aluno)
	{
		AlunoDAL alunod = new AlunoDAL();
		
		//Verifico se o nome do aluno já está cadastrado
		if (!alunod.NomeJaExiste(aluno.Nome))
		{
			alunod.Inserir(aluno);  //Gravando
		}
		else
		{
			//Lanço uma exeção
			throw new Exception($"O registro {aluno.Nome} já existe no sistema.");
		}
	}
	
	public List<AlunoDTO> ConsultarAlunos()
	{
		AlunoDAL alunod = new AlunoDAL();
		return alunod.ListarTodos();
	}
	
	public List<AlunoDTO> ConsultarAlunosPorNome(string nome)
	{
		AlunoDAL alunod = new AlunoDAL();
		return alunod.ListarTodosPorNome(nome);
	}
}

CONTROLLER

//GET: Aluno/Consulta
public ActionResult Consulta()
{
	//Inicializando a lista da classe model
	List<AlunoConsultaModel> lista = new List<AlunoConsultaModel>();
	
	try
	{
		AlunoBLL alunob = new AlunoBLL();
		
		foreach (AlunoDTO aluno in alunob.ConsultarAlunos())
		{
			AlunoConsultaModel model = new AlunoConsultaModel();
			model.Curso = new CursoConsultaModel();
			model.Turma = new TurmaConsultaModel();
			model.Turno = new TurnoConsultaModel();
			model.Nivel = new NivelConsultaModel();
			model.Funcionario = new FuncionarioConsultaModel();
			model.Responsavel = new ResponsavelConsultaModel();

			model.IdAluno = aluno.IdAluno;
			model.Nome = aluno.Nome;

			model.Curso.IdCurso = aluno.Curso.IdCurso; // --> Foreign key
			model.Curso.Nome = aluno.Curso.Nome;

			model.Turma.IdTurma = aluno.Turma.IdTurma; // --> Foreign key
			model.Turma.Nome = aluno.Turma.Nome;

			model.Turno.IdTurno = aluno.Turno.IdTurno; // --> Foreign key
			model.Turno.Nome = aluno.Turno.Nome;

			model.Nivel.IdNivel = aluno.Nivel.IdNivel; // --> Foreign key
			model.Nivel.Numero = aluno.Nivel.Numero;

			model.Funcionario.IdFuncionario = aluno.Funcionario.IdFuncionario; // --> Foreign key
			model.Funcionario.Nome = aluno.Funcionario.Nome;

			model.Responsavel.IdResponsavel = aluno.Responsavel.IdResponsavel; // --> Foreign key
			model.Responsavel.Nome = aluno.Responsavel.Nome;

			lista.Add(model);
		}
	}
	catch (Exception e)
	{
		TempData["Mensagem"] = e.Message;
	}
	
	//Enviando a lista para a página
	return View(lista);
}
 
//GET: Aluno/ConsultaPorNome
[HttpGet]
public ActionResult ConsultaPorNome(string nome)
{
	//Inicializando a lista da classe model
	List<AlunoConsultaPorNomeModel> lista = new List<AlunoConsultaPorNomeModel>();
	
	try
	{
		AlunoBLL alunob = new AlunoBLL();
		
		foreach (AlunoDTO aluno in alunob.ConsultarAlunos())
		{
			AlunoConsultaPorNomeModel model = new AlunoConsultaPorNomeModel();
			model.Curso = new CursoConsultaModel();
			model.Turma = new TurmaConsultaModel();
			model.Turno = new TurnoConsultaModel();
			model.Nivel = new NivelConsultaModel();

			model.IdAluno = aluno.IdAluno;
			model.Nome = aluno.Nome;

			model.Curso.IdCurso = aluno.Curso.IdCurso; // --> Foreign key
			model.Curso.Nome = aluno.Curso.Nome;

			model.Turma.IdTurma = aluno.Turma.IdTurma; // --> Foreign key
			model.Turma.Nome = aluno.Turma.Nome;

			model.Turno.IdTurno = aluno.Turno.IdTurno; // --> Foreign key
			model.Turno.Nome = aluno.Turno.Nome;

			model.Nivel.IdNivel = aluno.Nivel.IdNivel; // --> Foreign key
			model.Nivel.Numero = aluno.Nivel.Numero;

			lista.Add(model);
		}
	}
	catch (Exception e)
	{
		TempData["Mensagem"] = e.Message;
	}
	
	//Enviando a lista para a página
	return View(lista);
}

MODEL

namespace SisCursoWeb.Site.Models
{
	public class AlunoConsultaPorNomeModel : PessoaDTO
	{
		public int IdAluno { get; set; }
		public string Nome { get; set; }
		public CursoConsultaModel Curso { get; set; }
		public TurmaConsultaModel Turma { get; set; }
		public TurnoConsultaModel Turno { get; set; }
		public NivelConsultaModel Nivel { get; set; }
		public FuncionarioConsultaModel Funcionario { get; set; }
		public ResponsavelConsultaModel Responsavel { get; set; }
	}
}

VIEW

@model List<SisCursoWeb.Site.Models.AlunoConsultaPorNomeModel>

@{
	Layout = "~/Views/Shared/_Layout.cshtml";
}
 
<div class="card card-body bg-dark">
	<h2 class="text-white">Consultar Aluno por Nome</h2>
	<hr/>
</div>

<div class="row">
	<div class="col-md-4">
		<label>Pesquisar Aluno por Nome:</label>
		
		@using (Html.BeginForm("ConsultaPorNome", 
			"Aluno", 
			FormMethod.Get))
		{
			@Html.TextBox("nome")
			<input type="text" value="Consultar" class="btn btn-success btn-sm"/>
		}
		
		<br />
	</div>
</div>

<table class="table table-bordered table-striped table-hover">
	<thead>
		<tr>
			<th class="bg-info text-white">Código</th>
			<th class="bg-info text-white">Nome do Aluno</th>
			<th class="bg-info text-white">Curso</th>
			<th class="bg-info text-white">Turma</th>
			<th class="bg-info text-white">Turno</th>
			<th class="bg-info text-white">Nível</th>
		</tr>
	</thead>
	
	<tbody>
		@foreach (var item in Model)
		{
			<tr>
				<td>@item.IdAluno</td>
				<td>@item.Nome</td>
				<td>@item.Curso.Nome</td>
				<td>@item.Turma.Nome</td>
				<td>@item.Turno.Nome</td>
				<td>@item.Nivel.Numero</td>
			</tr>
		}
	</tbody>
	
	<tfoot>
		<tr>
			<td colspan="6">Quantidade de Registros: @Model.Count</td>
		</tr>
	</tfoot>
</table>

<div>
	<b>@TempData["Mensagem"]</b>
	<br />
</div>

Quando clico no botão o programa não faz nada como tela acima. Obrigado pela ajuda.

Assim o nome é exatamente como está escrito no banco.

Não deveria ser

WHERE Nome LIKE @Nome

???

Bom dia.
Fiz o acerto no código como descreveu, mas ainda não consigo ter resposta da consulta.

explique melhor não entendi.

Bom dia.
Fiz o acerto no código => Nome Like @Nome, mas mesmo assim quando coloco um nome que não está no banco de dados, e clico para consulta não está fazendo a consulta.
Obrigado pela ajuda.

Sinceridade não tem como a gente saber visto que vi no seu código precisa alterar a parte da sql

para:

WHERE Nome LIKE @Nome

e no parâmetro:

new { Nome = $"%{Nome}%" }

é assim que deveria ser feito para funcionar