2017-08-15 109 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

相关问题