2017-08-15 42 views
-2

我有以下代碼:如何將Enumerable值轉換爲正確的格式?

Client data = this.controllerPacients.getById(id).AsEnumerable() 
       .Select(row => new Client 
          { 
          taxcode = Convert.ToInt32(row.Field<int>("taxcode")).ToString() 

          }) 
       .Single(); 

所以,在數據庫領域taxcode是整數。在型號Client是字符串。

我得到一個錯誤,在此行中,當嘗試類型轉換:

System.InvalidCastException:「指定的轉換是無效的。」

附件:

enter image description here

我想這樣也:

DataTable data = db.GetDataTable("SELECT * FROM table where id =4"); 

var c = data.Rows[0].Field<int>("taxcode"); 
+0

你想用括號先執行整數轉換:在我的領域的關鍵獲取價值。'taxcode =(Convert.ToInt32(row.Field ( 「taxcode」)))的ToString() '? –

+0

我不確定,因爲我不明白錯誤的含義。但我認爲這是一個問題。 – user3573738

+0

「客戶」類中的「taxcode」是字符串屬性嗎?轉換順序決定分配給該屬性時的結果類型,確保「ToString」是最後一個要處理的。 –

回答

0

解決辦法是:

Client data = this.controllerPacients.getById(id).AsEnumerable().Select(row => new Client { 
    taxcode = Convert.ToInt32(row["taxcode"]) 
}).Single(); 

從哪兒結果DataTable中Single();提取第一行。

Convert.ToInt32(row["taxcode"]) 
2

我有一個不恰當的答案,回答這個問題......我要打破你的問題,並解釋爲什麼這是一個可怕的問題...

在您的代碼:

Client data = this.controllerPacients.getById(id).AsEnumerable() 
       .Select(row => new Client 
          { 
          taxcode = Convert.ToInt32(row.Field<int>("taxcode")).ToString() 

          }) 
       .Single(); 

......你沒有解釋任何它。這裏有一些要點:

a)controllerPacients你錯誤地拼寫錯了,是一個類級別的屬性,它可能隱藏了一個屬性,這意味着我們永遠無法看到這裏的bug堆棧溢出。你應該提供整體代碼,或者填寫任何空白並附上解釋。

b)getById(id)返回一些類似數組的類型,但我們看不到它是什麼。在這種情況下使用AnEnumerable有一些嚴重的代碼異味。你可以直接從getById結果中獲得select,或通過getById結果的屬性訪問看起來是行集合的東西嗎?

c)25000個演員...如果該字段爲int,並且您的班級有string,則只需使用.ToString()即可,您不需要進行所有此轉換。

d)您應該考慮在Client類中創建一個方法,它將Patient作爲參數並從中加載它的值,而不是從原始Patient的數據源加載。例如Client.LoadTaxCodeFromPatient(Patient)

E)你不必把一個Single()電話在什麼不應該是一個集合反正最後,如果getById返回比Patient類它做錯事的任何其他。

對不起,毆打你的問題了這樣,但有時我只是愛:)

+0

我可以演示'this .controllerPacients.getById' – user3573738

+0

更新的問題 – user3573738

+0

問題是,另一行工作:'datebirth = row.Field (「datebirth」)。ToString()' – user3573738

相關問題