当我使用以下代码时:
session.Query<Url>().Where(ur => ur.QueryString == url.QueryString)
我找到了我的结果,但是当我尝试使用.Equals时,我没有。为什么? Equals()方法是默认方法,没有覆盖。
这些LINQ查询之间的区别是什么?
答案 0 :(得分:2)
最大的区别在于它们是不同的功能&#34;。 public static bool operator == (Object other)
和public bool Equals(Object other)
可以独立定义。
然而,即使他们做同样的事情(或者一个人打电话给另一个人),他们是不同的电话的事实仍然意味着Linq提供商。结果是NHibernate可查询提供程序,其中&#34;翻译&#34;您使用Linq查询或方法链创建的表达式树可能会以不同方式对待这两者。它可以正确地将.Where(ur => ur.QueryString == url.QueryString)
解析为WHERE ur.QueryString = 'MyUrlQueryStringValue'
,但.Where(ur => ur.QueryString.Equals(url.QueryString))
可能会被忽略为不可用,或者返回错误,或者被解析为WHERE 0
。
答案 1 :(得分:0)
在比较对象......或实体时,最终会使用'Equals'。
'=='是在比较值时总是会使用的东西......例如字符串。
答案 2 :(得分:0)
==
比较引用,Equals()
是一种虚拟方法,无论它是否已实现,都可以运行。