在 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和FiscalYearNumberFiscalYearId 和 FiscalYearNumber 的数据类型分别是 tinyint 和 smallint。

展开项目时,我看到指定强制转换异常,我也尝试了 Int16,但它也给我抛出了一个异常。

这里的专家可以告诉我上面的代码可能有什么问题吗?任何指示或类似的东西将不胜感激。

问候阿努拉格

在 LINQ 查询中指定了强制转换异常

试试这个:

select (int) r.Field<byte>("FiscalYearId")

tinyint C# 中的字节,字节可以直接转换为int

编辑:

根据此列表:MSDN 映射 CLR 参数列表,tinyint 映射到 Byte。我认为与 where 的那行也损坏了,因为您正在尝试将smallint转换为 int32。

where r.Field<Int16>("FiscalYearNumber") == fYear

Int16相当于smallint