2013-09-27 35 views
0

希望大家都很好。在LINQ查詢中指定的演員異常

那麼,我越來越奇怪'指定演員無效'。在我的一個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從即剛剛2列DB,FiscalYearIdFiscalYearNumber得到一個DataTable。 FiscalYearId和FiscalYearNumber的數據類型分別爲tinyint和smallint。

當item擴展時,我看到Specified Cast異常,我也嘗試了Int16,但它也引發了一個異常。

專家在這裏可以告訴我在上面的代碼中可能是錯的嗎? 任何指針或類似的將不勝感激。

問候 阿努拉格

+0

檢查是否返回空值? –

+0

改用'r [「FiscalYearNumber」]和'r [「FiscalYearId」]。 –

+0

我想你可以使用'dtFiscalYearID.Rows [0] [「FiscalYearId」]。GetType()'來檢查字段的類型。 – Kaf

回答

3

試試這個:

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

+0

當然,我會馬上試試... – Anurag

+0

Wudzik先生,上述解決方案實際上不起作用,我也嘗試過您的解決方案的變體,但是徒勞,指定的演員例外發生。任何其他想法? – Anurag

+0

@Auurag檢查編輯 – wudzik