C# LinqToSql InvalidCastException

C# LinqToSql InvalidCastException,c#,linq-to-sql,enums,C#,Linq To Sql,Enums,好的,这是一个枚举,对吗 public enum BrandSafe : short { Yes = 1, No = -1, Unknown = 0 } 底层数据类型短,OK,到目前为止还不错 这是一张桌子: 现在,这里有一个DTO类: public class VurlRow { public long VurlRMXID { get; set; } public string VurlStrin

好的,这是一个枚举,对吗

    public enum BrandSafe : short
    {

        Yes = 1,
        No = -1,
        Unknown = 0

    }
底层数据类型短,OK,到目前为止还不错

这是一张桌子:

现在,这里有一个DTO类:

public class VurlRow
{

    public long VurlRMXID { get; set; }
    public string VurlString { get; set; }
    public Enums.BrandSafe BrandSafe  { get; set; }


}
最后,这里是一个linq方法:

        List<VurlRow> vurls = (from vurl in m_Context.Vurls
                     select new VurlRow()
                                {
                                    BrandSafe = (Enums.BrandSafe)vurl.BrandSafe,
                                    VurlRMXID = vurl.VurlRMXID,
                                    VurlString = vurl.VurlString

                                }).ToList();
List vurls=(来自m_Context.vurls中的vurl
选择新建VurlRow()
{
BrandSafe=(Enums.BrandSafe)vurl.BrandSafe,
VurlRMXID=vurl.VurlRMXID,
VurlString=vurl.VurlString
}).ToList();
我还尝试了(Enums.BrandSafe)Enum.ToObject(typeof(Enums.BrandSafe)、vurl.BrandSafe)来生成枚举。当我删除行BrandSafe=(Enums.BrandSafe)vurl.BrandSafe时,调用可以工作,但在该行中我得到一个InvalidCast异常

“指定的强制转换无效。”


似乎它对我来说应该是完全有效的,但是我知道什么,关于Enum和linq显然还不够,这里有人能帮忙吗?

BrandSafe
是数据库中的
tinyint
tinyint
映射到
byte
,而不是
short
。这就是问题所在。让它:

public enum BrandSafe : byte
{
    Yes = 1,
    No = -1, // <====== see below
    Unknown = 0
}
public enum BrandSafe:字节
{
是=1,

否=-1,//尝试
(Enums.BrandSafe)(短)vurl.BrandSafe
你能提供一个完整的异常消息吗?当然!Duh!我在DBML中更改了它,但我想我忘了更改表。谢谢你的帮助,也让我觉得自己像个白痴:)@cerhart也看到了我添加的最后一行,我把它设为一个很小的整数,但后来我决定使用-1作为值,然后我改变了将DBML设置为short,但忘记将表值设置为small int。然后我拒绝查看表中的答案。选择性盲。@cerhart不是问题;我很感激您提供了所有正确的信息来发现它!我不喜欢数据库中的NULL,可能是因为我懒惰,但这似乎增加了复杂性,再加上这种方式,我可以非常明确地在代码中使用enum,即enum.BrandSafe.Unknown,其中null可以表示未知,也可以表示不适用。任何一种方式都可以很好地工作,当然,这种方式非常适合我。