C# - 没有为类型'System.Int64'定义二进制运算符Equal

时间:2013-02-26 12:20:33

标签: c# .net parsing

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

我正在使用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 个答案:

答案 0 :(得分:0)

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

在你的情况下:

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

这有帮助吗?