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

时间:2013-09-27 08:07:57

标签: c# asp.net linq

希望每个人都很好。

好吧,我得到一个奇怪的'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,但它也引发了异常。

专家可以告诉我上面的代码可能有什么问题吗? 任何指针等都会非常感激。

此致 阿努拉格

1 个答案:

答案 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