希望每个人都很好。
好吧,我得到一个奇怪的'Specified Cast无效。'我的一个LINQ查询中的异常。
代码如下:
public string GetFiscalYearID(string fiscalYear)
{
int fYear = Convert.ToInt32(fiscalYear);
DataTable dtFiscalYearID = new DataTable();
dtFiscalYearID = DomainBL.GetDomainDataFromFieldName("FiscalYearId");
**var item = from r in dtFiscalYearID.AsEnumerable()
where r.Field<Int32>("FiscalYearNumber") == fYear
select r.Field<Int32>("FiscalYearId");**//Exception at this line
if (item.ToList().Count> 0)
{
return item.ToList()[0].ToString();
}
else
{
return string.Empty;
}
}
此处, dtFiscalYearID 从数据库获取一个DataTable,该数据库只有2列,即 FiscalYearId 和 FiscalYearNumber 。 FiscalYearId和FiscalYearNumber的DataType分别为tinyint和smallint。
当项目展开时,我看到Specified Cast异常,我也尝试过Int16,但它也引发了异常。
专家可以告诉我上面的代码可能有什么问题吗? 任何指针等都会非常感激。
此致 阿努拉格
答案 0 :(得分:4)
试试这个:
select (int) r.Field<byte>("FiscalYearId")
tinyint
是c#中的字节,字节可以直接转换为int
编辑:
根据此列表:MSDN mapping CLR parameter list,tinyint映射到Byte。我认为那里的行也被破坏了,因为你试图将smallint
转换为int32。
where r.Field<Int16>("FiscalYearNumber") == fYear
Int16
相当于smallint
。