【问题标题】:Unable to cast object of type 'System.Collections.Generic.List`1[System.Decimal]' to type 'System.IConvertible'无法将“System.Collections.Generic.List`1[System.Decimal]”类型的对象转换为“System.IConvertible”类型
【发布时间】:2014-04-25 17:39:07
【问题描述】:
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);

在此查询中,请注意 rate 有超过 1 个项目来自 getitems 其中 rate 是 Decimal 类型,所以我转换了它。

然后我返回单个实体 item 的视图,其中只有列 rate 是 List。

但我在调试时遇到此错误-

无法将“System.Collections.Generic.List`1[System.Decimal]”类型的对象转换为“System.IConvertible”类型。

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

@for (int i = 0; i < Model.rate; i++)
{
    <ul>
        <li><a href="#">@i</a></li>
    </ul>
}

【问题讨论】:

  • 但是商品中的税率类型是什么?
  • @Steve - Decimal(18,2)

标签: c# asp.net-mvc linq


【解决方案1】:

您正在创建一个IEnumerable&lt;decimal&gt;,其中包含将值分配给 rate 的这部分行

  itemlist.Select(m =>m.taxrate)

现在您将 IEnumerable 实现为 List&lt;decimal&gt;

  itemlist.Select(m =>m.taxrate).ToList()

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

要解决您的问题,我们需要知道 EstimatesModel.rate 的类型是什么

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

例如

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

或

rate = itemlist.First().taxRate;

编辑根据您在下面的评论,如果您想在EstimatesModel 类中存储调用db.getitems 返回的所有费率的列表,那么您需要定义字段@987654330 @作为List&lt;decimal&gt;

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

然后您可以简单地使用

构建您的列表
rate = itemlist.Select(m =>m.taxrate).ToList()

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

【讨论】:

  • 我在模型中也将费率设置为小数,并希望从上面的列表中选择所有费率元素。我还是不明白这个-rate = itemlist.Select(m =&gt;Convert.ToDecimal(m.taxrate)).ToList()
【解决方案2】:

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

rate = Convert.ToDecimal(itemlist.Max(m =&gt;m.taxrate))

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

rate = itemlist.Select(m =&gt;Convert.ToDecimal(m.taxrate)).ToList()

假设汇率是List&lt;decimal&gt;

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      相关资源
      最近更新 更多