Neste exercício:
var query = from a in atletas where a.CodigoPais == "JAM" select a;
O correto não seria : where a.CodigoPais equals "JAM" ?
Neste exercício:
var query = from a in atletas where a.CodigoPais == "JAM" select a;
O correto não seria : where a.CodigoPais equals "JAM" ?
Olá Antônio.
Os dois casos irão funcionar, então fica a seu critério. Eu mesmo geralmente tendo a preferir where a.CodigoPais == "JAM"
.
Para comparar objetos de classes complexas, como a classe Atleta do exemplo, o uso de Equals
é obrigatório. Lembra que ao comparar dois objetos, na verdade, está comparando o conteúdo que, no caso, vai ser o endereço de memória onde os dados estão salvos?
Atleta a1 = new Atleta { Posicao = 1, CodigoPais = "JAM", Nome = "BOLT Usain"};
Atleta a2 = new Atleta { Posicao = 1, CodigoPais = "JAM", Nome = "BOLT Usain"};
//Retorna False, pois a1 e a2 apontam para endereços de memória diferentes.
Console.WriteLine(a1 == a2);
//Já utilizando Equals vai retornar True, pois as propriedades estão com os mesmos valores.
Console.WriteLine(a1.Equals(a2));
Lembrando que seria necessário rescrever o método Equals
da classe Atleta.
public override bool Equals(object obj)
{
var outroAtleta = (Atleta)obj;
return this.Posicao.Equals(outroAtleta.Posicao)
&& this.CodigoPais.Equals(outroAtleta.CodigoPais)
&& this.Nome.Equals(outroAtleta.Nome);
}
Veja que para as propriedades posso escolher utilizar Equals
ou ==
que vai funcionar, mas para objetos complexos não vai funcionar.
public override bool Equals(object obj)
{
var outroAtleta = (Atleta)obj;
return this.Posicao == outroAtleta.Posicao
&& this.CodigoPais == outroAtleta.CodigoPais
&& this.Nome == outroAtleta.Nome;
}