Chúng tôi có một nhà phát triển mới hiện đang học LinqToSql. Trong khi đi qua mã của mình, chúng tôi nhận thấy rằng anh ta đang sử dụng .Equals
thay vì ==
để so sánh giá trị. Trên hết, anh ta đang so sánh một số int
với số string
. Điều khiến chúng tôi hoàn toàn bối rối, là nó đã hoạt động!LINQ to SQL .Equals trả về true khi so sánh int với chuỗi -> Id.Equals ("5") trả về true
Sau khi thực hiện một số thử nghiệm, nó dường như chỉ hoạt động với LinqToSql. LINQ đối tượng trả về false
và chỉ cần thực hiện int.Equals(“string”)
trả về false
.
Dưới đây là một thử nghiệm đơn giản sử dụng hai bảng 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);
}
}
KẾT QUẢ:
3.Equals("3") returns False
int .Equals String Results:
Mike
Joe
Candy
int == int Results:
Mike
Joe
Candy
Press any key to continue . . .
Bất kỳ lời giải thích?
lưu ý quan trọng về việc sử dụng == so với .Equals() trong LinqToSql, http://stackoverflow.com/questions/8105732/ef-4-1-linq-to-sql-what-is-better -using-equals-or –