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

标签 c# .net parsing

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

我首先使用 Entity Framework 代码,我的一个实体中有一个外键,我故意将其设置为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? 类型,但不知道这种情况是否有解决方法。

最佳答案

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

在你的情况下:

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

这有帮助吗?

关于C# - 没有为类型 'System.Int64' 定义二元运算符 Equal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15088990/

相关文章:

c# - 为什么要使用 Stack<T> 而不是 List<T>?

.net - .Net ThreadPool 线程的异常

c# - 为什么推荐的 dispose 模式会在层次结构的每个级别添加一个已处理字段?

c# - Obfuscar - 跳过匿名类型的混淆

c# - 通过 java 运行 .net 控制台时为 "The handle is invalid"

c# - 在方法参数中包含 OrderBy 委托(delegate)

c# - 如何在 Npgsql 中为查询提供表名作为命令参数?

c# - 如何解析节点名称中包含无效字符的XML?

json - 如何在 Scala 中以字符串形式读取嵌套 json 对象的一部分

java - 解析 ArrayList 中的 ArrayList 不起作用。