2013-01-12 100 views
0

我跑在我的ASP.NET MVC3應用程序查詢,以便從數據庫中獲取一些數據:ASP.NET MVC動態數字型

var idQuery = "SELECT " + dynamicColumnName + " FROM " + dynamicTableName; 
long[] idItems = db.Database.SqlQuery<long>(idQuery).ToArray(); 

但是,動態欄有時int int類型,有時long。我試圖long,因爲它涵蓋了INT,但節目拋出的異常:

從物化「System.Int32」類型指定的強制轉換到「System.Int64」類型無效。

我試過型dynamic,但不能得到的數字權:

dynamic[] idItems = db.Database.SqlQuery<dynamic>(idQuery).ToArray(); 
long[] idItemsLong = new long[idItems.Length]; 
for (int i = 0; i < idItemsLong.Length; i++) 
{ 
    idItemsLong[i] = Convert.ToInt64(idItemsLong[i]); 
} 

拋出異常:

無法轉換類型 'System.Object的' 對象鍵入'System.IConvertible'。

我能做些什麼工作我的查詢運行於int s和long s?獲取動態類型並將它們轉換爲長時間工作的方法,我可以在隨後的代碼行中使用idItems。

回答

0

我得到了一個解決方案,而動態類型的工作:

long[] idItems = new long[1]; 
long[] valueItems = new long[1]; 

try 
{ 
    idItems = db.Database.SqlQuery<long>(idQuery).ToArray(); 
    valueItems = db.Database.SqlQuery<long>(valueQuery).ToArray(); 
} 
catch (Exception e) 
{ 
    int[] idItemsInt = db.Database.SqlQuery<int>(idQuery).ToArray(); 
    int[] valueItemsInt = db.Database.SqlQuery<int>(valueQuery).ToArray(); 
    idItems = new long[idItemsInt.Length]; 
    valueItems = new long[idItemsInt.Length]; 
    for (int i = 0; i < idItems.Length; i++) 
    { 
     idItems[i] = Convert.ToInt64(idItemsInt[i]); 
     valueItems[i] = Convert.ToInt64(valueItemsInt[i]); 
    } 
} 

通過這個我得到多頭第一,如果類型爲int,比我得到的整數並轉換他們要長。如果我有一個動態類型,我會一直做轉換。所以如果我的類型很長(通常是),我沒有不必要的轉換,我認爲這是更快。

0

嘗試純天然的老object

object[] idItems = db.Database.SqlQuery<object>(idQuery).ToArray(); 
long[] idItemsLong = new long[idItems.Length]; 
for (int i = 0; i < idItemsLong.Length; i++) 
{ 
    idItemsLong[i] = Convert.ToInt64(idItems[i]); 
} 
+0

拋出異常: 無法將類型爲「System.Object」的對象轉換爲鍵入「System.IConvertible」。 –

+0

請在您首先發布答案之前嘗試。 –