2013-02-26 35 views
3

定义我得到这个错误,我非常有信心是什么导致它,但不是很确定如何解决它。C# - 二进制运算符Equal没有为类型'System.Int64'

我使用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正文,但然后我收到上面的错误和我的属性的类型是System.Nullable1[System.Int64]

我有第二个外键,它使用完全相同的逻辑,一切都很好。唯一的区别是,我可以看到,对于工作案例,类型为long,错误案例类型为long?

我想离开类型long?,但不知道是否有任何解决方法。

+1

因此,您在未向我们显示的代码中收到错误,我是否正确理解该错误? – 2013-02-26 12:23:19

+2

“你看到那个代码”在哪里?该方法的目的是什么(该方法的名称有助于识别)。另一个非常重要的问题是:什么是错误? – 2013-02-26 12:30:54

+0

是的,该项目非常大,所以我试图找出问题。如果我不明白,那么我想我必须自己做。但是fwi调用这个方法的代码是'GridFilterResult result = service.List(gridSettings);'。但我认为这个问题是我试图把'long?'解析为'long'我试图给'long?添加一个特定的情况,但是似乎不允许解析为'long?'...... – Leron 2013-02-26 12:31:01

回答

0

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

你的情况:

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

这是否帮助?

+0

对不起,这是前一阵子。我不再为同一家公司工作,所以我无法测试你的建议。如果它适用于某些情况,请将其留在此处,以便最终帮助其他人。 – Leron 2014-09-19 08:44:57

相关问题