我想弄清楚如何在以下代码上做一个Equal:
Int32? testValue = 264;
MyTable.Where(a=>a.MyNullableNumberField.Equals(testValue));
我遇到了可以为空的字段,我必须让Equals方法工作。我知道我可以使用“==”并且它可以工作但在这种情况下我必须使用Equals方法。 我收到的错误是:
无法创建“System.Object”类型的常量值。在此上下文中仅支持原始类型或枚举类型。
答案 0 :(得分:0)
您必须意识到==
运算符与.Equals()
之间的区别。通常,==
运算符会比较引用,而.Equals()
则用于比较值。当然,后一种意义上的比较只适用于原始类型的开箱即用。任何比这更复杂的对象(例如用户定义的类)都需要为其定义自定义.Equals()
,以指定究竟使该对象的两个实例相等的内容。
通常情况下,当涉及到可空数字时,C#足够聪明,可以自行处理事情。但是在某些情况下(例如linq-to-entities),你必须将它推向正确的方向。这应该有效:
a.MyNullableNumberField.Value.Equals(testValue)
为了完全安全,请在之前添加一个检查以确保该值存在:
a.MyNullableNumberField.HasValue && a.MyNullableNumberField.Value.Equals(testValue)