好的,所以这是一个枚举,对吧?
public enum BrandSafe : short
{
Yes = 1,
No = -1,
Unknown = 0
}
基础数据类型简短,好,到目前为止一直很好。
这是一张表:
现在,这是一个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();
我也尝试过(Enums.BrandSafe)Enum.ToObject(typeof(Enums.BrandSafe),vurl.BrandSafe)来生成Enum。当我删除BrandSafe =(Enums.BrandSafe)vurl.BrandSafe这一行时,调用可以正常工作,但是在行中我得到了一个InvalidCast异常。
“指定的演员表无效。”
似乎它对我来说应该是完全有效的,但是我知道什么,显然,关于enums和linq的不够,这里的任何人都可以帮忙吗?
答案 0 :(得分:3)
BrandSafe
为tinyint
; tinyint
映射到byte
,而不是short
。那就是问题所在。成功:
public enum BrandSafe : byte
{
Yes = 1,
No = -1, // <====== see below
Unknown = 0
}
(short
将映射到smallint
)
然而!!!!请注意,-1
对{strong> byte
/ tinyint
并非真正合法的价值 - 在.NET中它将是255或OverflowException
(取决于它是否是已检查或未检查的上下文),以及数据库中的算术溢出(错误220)。
bool?
(在C#中)和bit null
(TSQL)是否会更好地匹配。