C# - 二进制运算符“等于”未定义于类型“System.Int64”。

23 浏览
0 Comments

C# - 二进制运算符“等于”未定义于类型“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?,但不知道这种情况是否有任何解决方法。

admin 更改状态以发布 2023年5月21日
0
0 Comments

我知道这是一个老问题,但我遇到了一个案例,在那个案例中生成T?并不起作用,但将其更改为Nullable就可以。即它适用于long的代码生成,但不适用于long?

在你的情况下:

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

这有帮助吗?

0