Tenemos un nuevo desarrollador que acaba de aprender LinqToSql. Al revisar su código, notamos que estaba usando .Equals
en lugar de ==
para una comparación de valores. Además de eso, está comparando un int
con un string
. Lo que nos desconcertó por completo fue que funcionó.Linq to SQL .Equals devuelve true al comparar int con string -> Id.Equals ("5") devuelve true
Después de algunas pruebas, parece que solo funciona con LinqToSql. Linq to objects returns false
y simplemente haciendo int.Equals(“string”)
devuelve false
.
continuación se presenta una prueba simple utilizando dos tablas SQL:
Customer
Id(PK)(int)
Name(varchar)
CompanyId(FK)(int)
Company
Id(PK)(int)
Name(varchar)
Console.WriteLine("{0}.Equals(\"{1}\") returns {2}", 3, "3", 3.Equals("3"));
using (WrDataClassesDataContext wrDataContext = new WrDataClassesDataContext())
{
var customers1 = from c in wrDataContext.Customers
where c.CompanyId.Equals("3")
select c;
Console.WriteLine("int .Equals String Results: ");
foreach (Customer customer in customers1)
{
Console.WriteLine(customer.Name);
}
var customers3 = from c in wrDataContext.Customers
where c.CompanyId == 3
select c;
Console.WriteLine("int == int Results: ");
foreach (Customer customer in customers3)
{
Console.WriteLine(customer.Name);
}
}
RESULTADOS:
3.Equals("3") returns False
int .Equals String Results:
Mike
Joe
Candy
int == int Results:
Mike
Joe
Candy
Press any key to continue . . .
Cualquier explicación?
una nota importante sobre el uso de == versus .Equals() en LinqToSql, http://stackoverflow.com/questions/8105732/ef-4-1-linq-to-sql-what-is-better -using-equal-or –