Aprecio imensamente todo o conhecimento que o instrutor tem sobre a linguagem e as bibliotecas, e sua experiência na área, mas acredito que a solução ficou um tanto confusa com todos os "zigue-zagues", então vou sugerir uma outra:
// Primeiro crio um método só para a mediana, já que facilita manutenção e utilização.
// Nesse caso, o método também lida com interações com o "client"
// (Console.WriteLine()), mas o ideal seria um método para calcular
// e outro para exibir os resultados
private static void MedianaValoresVenda()
{
Console.WriteLine("Mediana valores venda");
using (var context = new AluraTunesEntities())
{
// Direto na consulta já ordeno e seleciono o que quero
// porque o desenvolvedor que chamar esse método
// não deveria ter de se preocupar com outros dados
var notasFiscais = (
from nfs in context.NotaFiscals
orderby nfs.Total
select nfs.Total
)
// Conversão para lista a fim de facilitar manipulação
.ToList();
// Busco o tamanho da lista e atribuo como quantidade,
// pois essa informação é importante para cálculo
int qtdNotasFiscais = notasFiscais.Count();
// Não é necessário criar uma variável para isso,
// mas o fiz com fins de legibildade
bool qtdPar = qtdNotasFiscais % 2 == 1;
decimal mediana;
if (qtdPar)
{
// Caso seja par, a mediana é a metaded da soma dos
// dois valores ao centro da lista
mediana = (notasFiscais[qtdNotasFiscais / 2] + notasFiscais[(qtdNotasFiscais / 2) + 1]) / 2;
} else
{
// Caso seja ímpar, a mediana é o valor ao centro da lista
mediana = notasFiscais[qtdNotasFiscais / 2];
}
// Informando ao "client" do que foi feito e o resultado
Console.WriteLine($"Quantidade notas analisadas: {qtdNotasFiscais}");
Console.WriteLine($"Mediana: {mediana}\n\n");
}
Console.ReadLine();
}
// Agora é só chamar no Main()!
// (no meu caso, escrevi o método ABAIXO do Main
// como boa prática de Código Limpo
// (método chamando métodos abaixo criando linearidade
// sequencial na leitura do código)
static void Main(string[] args)
{
MedianaValoresVenda();
}