NHibernate Linq中Equals方法和==运算符之间的区别是什么?

时间:2014-08-26 21:10:56

标签: c# sql-server linq nhibernate equals

当我使用以下代码时:

session.Query<Url>().Where(ur => ur.QueryString == url.QueryString)

我找到了我的结果,但是当我尝试使用.Equals时,我没有。为什么? Equals()方法是默认方法,没有覆盖。

这些LINQ查询之间的区别是什么?

3 个答案:

答案 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()是一种虚拟方法,无论它是否已实现,都可以运行。