【问题标题】:C# - The binary operator Equal is not defined for the types 'System.Int64'C# - 未为类型“System.Int64”定义二元运算符 Equal
【发布时间】:2013-02-11 21:30:57
【问题描述】:

我收到了这个错误,我对导致它的原因非常有信心,但不太确定如何解决它。

我正在使用entity framework code first,并且我的一个实体中有一个外键,我特意将其设置为long?

public long? ClientId { get; set; }
public virtual Client Client { get; set; }

然后我使用我创建的数据库中的数据来填充DataGridView,问题就来了。我正在通过dgv 的元素使用自定义搜索/过滤,并且此自定义过滤的代码被继承。到目前为止它工作得很好,但是当我尝试使用 ClientID 过滤时,我收到了帖子名称的错误。

我开始调试并看到了这个:

if (property.PropertyType == typeof(string))
                        {//some code
else if (property.PropertyType == typeof(bool))
                        {//other code
else if(rule.Data.Equals("1") || rule.Data.ToLower().Equals("true"))
                            {//again some code
else if (property.PropertyType == typeof(Int32))
                        {//some code
...

因为我的值是 long? 类型,所以我的代码没有进入以下条件,所以我的代码输入了默认条件:

else
   {
       long value = 0;
       if (long.TryParse(rule.Data, out value))
   {..code

根据调试器,解析返回 true,因为我进入了 if 正文,但随后我从上面收到错误,并且 me 属性的类型是 System.Nullable1[System.Int64]

我有第二个外键,它使用完全相同的逻辑,并且一切正常。我能看到的唯一区别是,对于工作情况,类型是long,对于错误情况,类型是long?

我想保留long? 类型,但不知道这种情况是否有任何解决方法。

【问题讨论】:

  • 那么,您在未向我们展示的代码中收到错误,我理解正确吗?
  • “你看到那个代码”在哪里?方法的目的是什么(方法的名称有助于识别)。另一个非常重要的问题:错误是什么?
  • 是的,这个项目很大,所以我试图找出问题所在。如果我不理解,那么我想我将不得不自己做。但是调用此方法的代码是 GridFilterResult<T> result = service.List(gridSettings); 。但我认为问题在于我尝试将long? 解析为long 我试图为long? 添加一个特定案例,但似乎不允许解析为long?...
  • Leron,请告诉我们错误或异常! :-) 还要发布发生异常的代码。
  • @juharr,我分别不同意。请参阅:stackoverflow.com/questions/7573590/… 了解原因。

标签: c# .net parsing


【解决方案1】:

我知道这是一个老问题,但我遇到过T? 的生成实际上不起作用,但将其更改为Nullable<T> 的情况。即它生成适合long 但不适用于long? 的代码。

在你的情况下:

public Nullable<long> ClientId { get; set; } // change long? to Nullable<long>
public virtual Client Client { get; set; }

这有帮助吗?

【讨论】:

  • 对不起,这是不久前的事了。我不再为同一家公司工作,所以我无法测试你的建议。不过,如果它适用于某些情况,请将其留在这里,以便最终可以帮助其他人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
相关资源
最近更新 更多