【问题标题】:The "==" operator cannot be used for operands of ("enum") or "int" operations"==" 运算符不能用于 ("enum") 或 "int" 操作的操作数
【发布时间】:2020-06-07 19:03:55
【问题描述】:

当我尝试从数据库(SQL 服务器/实体框架)中检索数据时,出现以下错误:

"==" 运算符不能用于 ("enumDropDown") 或 "int" 操作的操作数。

而且我无法在控制器中很好地编写查询,这会引发错误 靠近DropdownClassList == 2。

控制器:(我试过)


var listaOdbioruNadgodzin = _ecpContext.Karta.Where(x => x.Login == userName && x.DropdownClassList== 2)

型号:

public partial class modelCard
{
    public enumDropDown? DropdownClassList{ get; set; }
}

public enum enumDropDown
{
    test1 = 1,
    test2 = 2,
    test3 =3
}

【问题讨论】:

  • x.DropdownClassList == enumDropDown.test2

标签: c# asp.net sql-server entity-framework


【解决方案1】:

将您的代码更改为:

var listaOdbioruNadgodzin = _ecpContext.Karta.Where(
               x => x.Login == userName && 
               x.DropdownClassList== enumDropDown.test2)

您当前正在将枚举值与字符串“2”进行比较,而您需要将其与枚举类型进行比较。

还有两个选项供您选择(虽然不推荐,它们的性能相同 How to compare enum and int values?)

x.DropdownClassList == (enumDropDown?)2

或

(int)x.DropdownClassList == 2

【讨论】:

  • 显然,当我们确切知道值为enumDropDown.test2时,我们不应该将enum转换为int
  • 完全同意,这就是我在回复中提到though not recommended 的原因。虽然这是一个选项,但它表明了原始相等性失败的原因。
  • 是的,这是有道理的,先生。
【解决方案2】:

您应该将属性值与枚举值进行比较:

var listaOdbioruNadgodzin = _ecpContext.Karta.Where(x => x.Login == userName && x.DropdownClassList == enumDropDown.test2)

【讨论】:

    【解决方案3】:

    根据@juergen d 的评论,您应该更改代码以比较enumDropDown 而不是int。

    var listaOdbioruNadgodzin = _ecpContext.Karta
                 .Where(x => x.Login == userName && x.DropdownClassList == enumDropDown.test2);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 1970-01-01
      相关资源
      最近更新 更多