public Data.TbFmCharge GetChargeDetail(string ChargeCode)
    {
        Data.DataContext dc = new Data.DataContext(gzConnectionString);
        if (dc.TbFmCharges.Any(th => th.ChargeCode == ChargeCode))
        {
            return dc.TbFmCharges.FirstOrDefault(th => th.ChargeCode == ChargeCode);      
        }
        else
            return new Data.TbFmCharge();
    }其中th.ChargeCode 是string 类型的
然后在红色的那一句上面报
无法将类型为“System.Decimal”的对象强制转换为类型“System.String”。 
我表示相当无奈,求助,求助~~在线等~~

解决方案 »

  1.   

    类型转换一下, Decimal无法隐式转换为string
      

  2.   

    非常确定以及肯定,两个都是String类型的
      

  3.   

    th.ChargeCode  如果你确定这个为string的话,你试试Equals吧
      

  4.   

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ChargeCode", DbType="NVarChar(50) NOT NULL", CanBeNull=false)]
    [global::System.Runtime.Serialization.DataMemberAttribute(Order=4)]
    public string ChargeCode
    {
    get
    {
    return this._ChargeCode;
    }
    set
    {
    if ((this._ChargeCode != value))
    {
    this.OnChargeCodeChanging(value);
    this.SendPropertyChanging();
    this._ChargeCode = value;
    this.SendPropertyChanged("ChargeCode");
    this.OnChargeCodeChanged();
    }
    }
    }
    字段是这样定义的
      

  5.   

    th => th.ChargeCode 
    你把鼠标hover到后面一个th上面,看一下th的数据类型,再看一下这个数据类型里面定义的ChangeCode属性,是什么类型的
    我怀疑lz是在不同的class里面都定义了ChangeCode属性,一个是String的,一个是Decimal的
    Search "ChangeCode" in entire solution就了然了
      

  6.   

    原来是这个表的另一个字段对应数据库字段不对应,跟这个字段毫无关系,就好像例如现在是ChargeCode进行筛选,其实是这个表的RefType在程序的类型是string在数据库中却是Numeric,所以就报那个错误了