Linq - 接收错误“无法将类型为'System.String'的对象强制转换为'System.Byte []'。”

时间:2015-03-24 19:40:06

标签: c# linq-to-sql lambda

这是我第一次尝试使用LINQ。我有一个数据库表,包含两个字符串列,一个位列和一个定义为int的id列。该表包含配置数据,因此只有一行。

数据库定义......

CREATE TABLE [dbo].[Configuration](
[Id] [int] IDENTITY(1,1) NOT NULL,
[LegalRepository] [nvarchar](100) NOT NULL,
[TitleRepository] [nvarchar](100) NOT NULL,
[AlwaysOpenOnDesktop] [bit] NOT NULL
) ON [PRIMARY]

查询看起来像这样......

Configuration config = fileSearchDB.Configurations.Single(c => c.Id == configId);

Configuration类是......

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Configuration")]
public partial class Configuration
{

    private int _Id;

    private System.Data.Linq.Binary _LegalRepository;

    private System.Data.Linq.Binary _TitleRepository;

    private bool _AlwaysOpenOnDesktop;

    public Configuration()
    {
    }

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.Always, DbType="Int NOT NULL IDENTITY", IsDbGenerated=true)]
    public int Id
    {
        get
        {
            return this._Id;
        }
        set
        {
            if ((this._Id != value))
            {
                this._Id = value;
            }
        }
    }

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_LegalRepository", DbType="VarBinary(MAX) NOT NULL", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
    public System.Data.Linq.Binary LegalRepository
    {
        get
        {
            return this._LegalRepository;
        }
        set
        {
            if ((this._LegalRepository != value))
            {
                this._LegalRepository = value;
            }
        }
    }

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_TitleRepository", DbType="VarBinary(MAX) NOT NULL", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
    public System.Data.Linq.Binary TitleRepository
    {
        get
        {
            return this._TitleRepository;
        }
        set
        {
            if ((this._TitleRepository != value))
            {
                this._TitleRepository = value;
            }
        }
    }

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AlwaysOpenOnDesktop", DbType="Bit NOT NULL")]
    public bool AlwaysOpenOnDesktop
    {
        get
        {
            return this._AlwaysOpenOnDesktop;
        }
        set
        {
            if ((this._AlwaysOpenOnDesktop != value))
            {
                this._AlwaysOpenOnDesktop = value;
            }
        }
    }
}

int字段configId = 1,它是表中唯一行的id。

为什么我收到此错误?

无法转换类型为' System.String'的对象输入' System.Byte []'

谢谢, 加里

更新:我添加了Configuration类的定义,并且configId变量是一个int

2 个答案:

答案 0 :(得分:1)

在查看Configuration类的定义后,我看到存储库字段被定义为二进制。它们应该是字符串。我删除了配置表并对其进行了读取,现在将列定义为字符串。

答案 1 :(得分:0)

您对Configuration的定义将LegalRepository和TitleRepository声明为不可变二进制字段,在数据库中,它们是简单的字符串。字段的DB声明必须更改为varbinary,或者对象字段应该变为普通的string属性。