LinqToSqlを学習している新しい開発者がいます。コードを調べているうちに、値の比較に==
の代わりに.Equals
を使用していたことがわかりました。さらに、int
とstring
を比較しています。私たちを完全に困惑させたのは、それが成功したということでした!Linq to SQL .Equalsはintをstring-> Idに比較するとtrueを返します.Equals( "5")がtrueを返します
いくつかのテストを行った後、LinqToSqlでしか動作しないようです。オブジェクトへのLinqはfalse
を返し、ちょうどint.Equals(“string”)
を実行するとfalse
を返します。
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);
}
}
結果:
3.Equals("3") returns False
int .Equals String Results:
Mike
Joe
Candy
int == int Results:
Mike
Joe
Candy
Press any key to continue . . .
どれ説明
以下は、2つのSQLテーブルを使用して簡単なテストですか?
LinqToSqlでの==対.Equals()の使用に関する重要な副作用、http://stackoverflow.com/questions/8105732/ef-4-1-linq-to-sql-what-is-better -using-equals-or –