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可以表示未知,也可以表示不适用。任何一种方式都可以很好地工作,当然,这种方式非常适合我。