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

use*_*213 8 c# linq asp.net-mvc

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);
Run Code Online (Sandbox Code Playgroud)

在这个查询中注意,速率有多个来自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>
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 9

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

  itemlist.Select(m =>m.taxrate)
Run Code Online (Sandbox Code Playgroud)

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

  itemlist.Select(m =>m.taxrate).ToList()
Run Code Online (Sandbox Code Playgroud)

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

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

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

例如

rate = itemlist.Max(m =>m.taxrate);
Run Code Online (Sandbox Code Playgroud)

要么

rate = itemlist.First().taxRate;
Run Code Online (Sandbox Code Playgroud)

编辑按照下面的评论,如果你想在EstimatesModel课堂上存储一个由调用返回的所有费率的列表,db.getitems那么你需要将该字段定义rateList<decimal>

public class EstimatesModel
{
    ....
    List<decimal> rate;
}
Run Code Online (Sandbox Code Playgroud)

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

rate = itemlist.Select(m =>m.taxrate).ToList()
Run Code Online (Sandbox Code Playgroud)

没有必要Convert.ToDecimal(... m.taxrate ...)taxrate已经是一个小数