Ola, ainda não consegui entender a vantagem no FromSQL se somos obrigados a jogar para uma entidade mapeada. O SQL do exemplo, mesmo com view ficou meio ruim e poderia ser feito melhor com Linq puro, que é quase um SQL, por exemplo:
var queryEstrelados =
from ator in contexto.Atores
join elenco in contexto.Elenco on ator.Id equals elenco.Ator.Id
group ator by new { ator.Id, ator.PrimeiroNome, ator.UltimoNome } into estrelados
let filmesCount = estrelados.Count()
orderby filmesCount descending
select new
{
Id = estrelados.Key.Id,
Nome = $"{estrelados.Key.PrimeiroNome} {estrelados.Key.UltimoNome}",
Filmes = filmesCount
};
foreach (var ator in queryEstrelados.Take(5))
{
System.Console.WriteLine($"O ator ({ator.Id}) {ator.Nome} atuou em {ator.Filmes} filmes.");
}
Gera a consulta:
Executed DbCommand (15ms) [Parameters=[@__p_0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
SELECT TOP(@__p_0) [ator].[actor_id] AS [Id], [ator].[first_name] AS [PrimeiroNome], [ator].[last_name] AS [UltimoNome], COUNT(*) AS [Filmes]
FROM [actor] AS [ator]
INNER JOIN [film_actor] AS [elenco] ON [ator].[actor_id] = [elenco].[actor_id]
GROUP BY [ator].[actor_id], [ator].[first_name], [ator].[last_name]
ORDER BY [Filmes] DESC
Bem mais limpa e simples que o FromSQL.
Sei que é só um exemplo pra ensinar usar o FromSQL e isso é importante, mas existe algum motivo pra usar quando não da pra usar o Linq puro? Porque não deixar de lado o EF, pra esse caso e baixar um DataReader direto no banco?
Fiquei pensando e não consegui bolar um exemplo em que não da pra usar no Linq puro, e valeria a pena usar um FromSQL que me obriga a enviar para entidades mapeadas.