0

みんなが元気であることを願っています。

「Specified Cast is not valid.」という奇妙なメッセージが表示されます。私のLINQクエリの1つで例外が発生しました。

コードは次のとおりです。

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は、 FiscalYearIdFiscalYearNumberの 2 つの列だけを持つ DB から DataTable を取得します。FiscalYearId と FiscalYearNumber の DataTypes は、それぞれ 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 にマップされます。smallintint32に変換しようとしているために where の行も破損していると思います。

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

Int16と同等smallintです。

于 2013-09-27T08:10:10.473 に答える