无法转换类型&System; System.Collections.Generic.List`1 [System.Decimal]'键入' System.IConvertible'

时间:2014-04-25 08:59:34

标签: c# asp.net-mvc linq

var itemlist = (from u in db.getitems
                select u).ToList();

var item= new EstimatesModel
             {
                 id = Convert.ToInt64(estimatelist.id),
                 expiry_date = estimatelist.expiry_date,
                 terms_conditions = estimatelist.terms_conditions,
                 rate = Convert.ToDecimal(itemlist.Select(m =>m.taxrate).ToList())

             };

return View(item);

此查询中指出,如果getitems rate属于Decimal类型,则费率有多个来自item的项目,因此我对其进行了转换。

然后我返回单个实体rate的视图,其中只有List列为@for (int i = 0; i < Model.rate; i++) { <ul> <li><a href="#">@i</a></li> </ul> }

但是我在调​​试时遇到了这个错误 -

  

无法转换类型&System; System.Collections.Generic.List`1 [System.Decimal]&#39;输入&#39; System.IConvertible&#39;。

我会在视图页面中使用这个 -

{{1}}

3 个答案:

答案 0 :(得分:8)

您正在使用此部分行创建IEnumerable<decimal>,将值分配给费率

  itemlist.Select(m =>m.taxrate)

现在,您使用

将IEnumerable实现为List<decimal>
  itemlist.Select(m =>m.taxrate).ToList()

并将此列表传递给Convert.ToDecimal,据我所知,接收List的Convert.ToDecimal没有重载。因此错误。

要解决您的问题,我们需要知道EstimatesModel.rate

的类型

如果它是一个简单的小数(不是小数列表),那么你需要告诉我们应该使用整个列表中的值。 第一个,最后一个,总和,平均值?

例如

rate = itemlist.Max(m =>m.taxrate);

rate = itemlist.First().taxRate;

编辑按照下面的评论,如果您想在EstimatesModel课程中存储调用db.getitems所返回的所有费率的列表,那么您需要定义字段rateList<decimal>

public class EstimatesModel
{
    ....
    List<decimal> rate;
}

然后您可以使用

简单地构建列表
rate = itemlist.Select(m =>m.taxrate).ToList()

无需Convert.ToDecimal(... m.taxrate ...) taxrate已经是小数

答案 1 :(得分:2)

rate = Convert.ToDecimal(itemlist.Select(m =>m.taxrate).ToList())是问题所在。速率是标量decimal,如果是,您想要最大/最小/平均值吗?最大限度地尝试:

rate = Convert.ToDecimal(itemlist.Max(m =>m.taxrate))

但是,如果要转换itemlist中的每个项目并返回列表,请尝试:

rate = itemlist.Select(m =>Convert.ToDecimal(m.taxrate)).ToList()

假设费率为List<decimal>

答案 2 :(得分:0)

这是将列表中的所有项目转换为十进制的正确方法。

rate = itemlist.Select(x => Convert.ToDecimal(x.taxrate)).ToList();