2012-02-17 36 views
7

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?

+0

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 –

Trả lời

11

LINQ to SQL tạo mã SQL từ truy vấn LINQ của bạn. Trong SQL, so sánh một số int với số string hoàn toàn hợp lệ. Điều gì xảy ra là bằng cách sử dụng .Equals, bạn bỏ qua loại kiểm tra nhà điều hành == tại thời điểm biên dịch.

5

So sánh của bạn được dịch sang SQL và SQL hoạt động khác với C# và .NET Framework. Nó tương tự như cách "a" == "A" là sai trong C#, nhưng có thể đúng khi nó là một phần của truy vấn.

Các vấn đề liên quan