1

我正在尝试从 ASP.NET MVC3 页面中的实体框架填充 ComboBox 的数据。在模型中,我添加了 DataRepository.cs :

    public List<SelectListItem> GetBookPrices()
    {
        var BookPrice = (from bookPrice in ddlEntity.tblBook
                          select new SelectListItem
                          {
                              Text = Convert.ToString(bookPrice .Price),
                              Value = Convert.ToString(bookPrice.Price)
                          }).Distinct();
        return BookPrice .ToList();
    }

和 DDLProperty.cs:

    public decimal PriceId { get; set; }

    public List<SelectListItem> PriceValue { get; set; }

在我的数据库中,我有一个价格列作为小数。我可以正确地为具有 varchar 数据类型的 DropDownList 进行绑定,而不会出现任何错误,但我无法弄清楚如何修复上述代码以使其成为小数。

这是我的控制器:

    DataRepository objRepository = new DataRepository();

    public ActionResult Price()
    {
        DDLProperties objDDL = new DDLProperties();
        objDDL.PriceValue = objRepository.GetBookPrices();

        return View(objDDL);
    }

这是错误:

LINQ to Entities does not recognize the method 'System.String ToString(System.Decimal)' method, and this method cannot be translated into a store expression.

它指向以下行: return BookPrice .ToList();

我开始学习 MVC,所以非常感谢任何帮助。谢谢。

4

1 回答 1

1

BookPrice.ToList()是实际运行查询的行。Entity Framework 在其大多数函数上使用延迟执行,因此查询仅在您实际调用数据时运行,就像调用 ToList() 一样。

话虽如此,您在上面的 GetBookPrices() 中尝试做的实际上是将该 select 语句放入实际的数据库查询本身。这就是你得到 Entity Framework 告诉你它不知道如何处理你的价格的 ToString() 方法的地方。ToString 实际上并不是它在该上下文中识别的东西。

为了解决这个问题,我建议您将数据库调用和转换拆分为选择列表,如下所示:

public List<SelectListItem> GetBookPrices()
{
    var Books = ddlEntity.tblBook.ToList();
    var BookPrice = Books.Select(bookPrice => new SelectListItem
                                             {
                                              Text = Convert.ToString(bookPrice .Price),
                                              Value = Convert.ToString(bookPrice.Price)
                                             }).Distinct();
    return BookPrice.ToList();
}
于 2012-12-26T20:52:53.413 回答