在 LINQ 查询中指定了强制转换异常
本文关键字:转换 异常 LINQ 查询 | 更新日期: 2023-09-27 18:33:11
希望每个人都很好。
好吧,我在我的一个 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 的数据类型分别是 tinyint 和 smallint。
展开项目时,我看到指定强制转换异常,我也尝试了 Int16,但它也给我抛出了一个异常。
这里的专家可以告诉我上面的代码可能有什么问题吗?任何指示或类似的东西将不胜感激。
问候阿努拉格
试试这个:
select (int) r.Field<byte>("FiscalYearId")
tinyint
C# 中的字节,字节可以直接转换为int
编辑:
根据此列表:MSDN 映射 CLR 参数列表,tinyint 映射到 Byte。我认为与 where 的那行也损坏了,因为您正在尝试将smallint
转换为 int32。
where r.Field<Int16>("FiscalYearNumber") == fYear
Int16
相当于smallint
。