Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ到sql的格式异常。字符串长度必须正好为一个字符_C#_Linq To Sql - Fatal编程技术网

C# LINQ到sql的格式异常。字符串长度必须正好为一个字符

C# LINQ到sql的格式异常。字符串长度必须正好为一个字符,c#,linq-to-sql,C#,Linq To Sql,此代码引发错误“格式异常。字符串长度必须正好为一个字符”。我不明白为什么。有什么想法吗 var contract = (from c in db.SM_CONTRACTs where c.CON_TUK2 != null && c.CON_TUK2 == req.Imei select c).FirstOrDefault(); 请求Imei看起来像“89442000059770

此代码引发错误“格式异常。字符串长度必须正好为一个字符”。我不明白为什么。有什么想法吗

var contract = (from c in db.SM_CONTRACTs
                where c.CON_TUK2 != null
                   && c.CON_TUK2 == req.Imei
                select c).FirstOrDefault();
请求Imei看起来像“8944200005977030038”

数据上下文如下所示:

[Column(Storage="_CON_TUK2", DbType="VarChar(20)")]
public string CON_TUK2
{
    get
    {
        return this._CON_TUK2;
    }
    set
    {
        if ((this._CON_TUK2 != value))
        {
            this.OnCON_TUK2Changing(value);
            this.SendPropertyChanging();
            this._CON_TUK2 = value;
            this.SendPropertyChanged("CON_TUK2");
            this.OnCON_TUK2Changed();
        }
    }
}

可能的情况是,数据库中的SM_CONTRACTs表有一个或多个varchar(1)(或nvarchar(1))列。代码生成器将此转换为模型中的System.Char。只要数据不是一个字符,就会抛出FormatException


请尝试在模型设计器中查找此列,并将“代码生成-类型”属性更改为“字符串”。

它不一定与您在特定linq查询(或where语句)中使用的字段有关

它可以是属于
CHAR(1)
但存储有“空字符串”作为数据的任何模型字段。它对sql
CHAR
类型有效,但对C#中的
System.CHAR
无效


将此字段类型更改为
string
应该很容易解决。

它真的是数据库中的VarChar(20)吗?嗯。考虑到表字段的大小为1,这不会将req.Imei中的值截断为单个字符吗?@J.Steen问题不在于Imei。当对象实例化时,如果该列在db中为空,则它会尝试将“”放入字符(1)中,因此会被忽略