0

希望每个人都很好。

好吧,我得到一个奇怪的“指定演员表无效”。我的一个 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 列,即FiscalYearIdFiscalYearNumber。FiscalYearId 和 FiscalYearNumber 的数据类型分别是 tinyint 和 smallint。

展开项目时,我看到 Specified Cast 异常,我也尝试了 Int16,但它也引发了异常。

这里的专家可以告诉我上面的代码可能有什么问题吗?任何指针等将不胜感激。

问候阿努拉格

4

1 回答 1

4

试试这个:

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

tinyint在c#中是字节,字节可以int直接转换为

编辑:

根据这个列表:MSDN mapping CLR parameter list,tinyint被映射到Byte。我认为与 where 的行也已损坏,因为您正在尝试转换smallint为 int32。

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

Int16相当于smallint

于 2013-09-27T08:10:10.473 回答