繁体   English   中英

无法将类型为'System.Collections.Generic.List`1 [System.Decimal]'的对象强制转换为'System.IConvertible'

[英]Unable to cast object of type 'System.Collections.Generic.List`1[System.Decimal]' to type 'System.IConvertible'

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项目,其中rateDecimal类型,所以我转换了它。

然后我返回单个实体item视图,其中只有列rateList

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

无法将类型为“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>
}

您正在创建一个IEnumerable<decimal> ,该行的这一部分将值赋值给rate

  itemlist.Select(m =>m.taxrate)

现在,您将IEnumerable实现为List<decimal>

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

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

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

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

例如

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

要么

rate = itemlist.First().taxRate;

编辑在下面的评论之后,如果你想在EstimatesModel类中存储调用db.getitems返回的所有费率的列表,那么你需要将字段rate定义为List<decimal>

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

然后你可以简单地建立你的列表

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

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

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()

假设rate是List<decimal>

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM