从几个db列创建一个@ Html.DropdownList

时间:2013-09-23 09:35:10

标签: c# asp.net linq asp.net-mvc-4 entity-framework-5

当v.ID是我模型中的整数属性时,有人可以帮我弄清楚如何做到这一点吗?

ViewBag.VendorID = new SelectList(db.Vendors.Select(v => new SelectListItem
{
    Value = v.ID,
    Text = string.Format("{0} {1} {2}", v.Title, v.Firstname, v.Secondname)
}), "Text", "Value");

return View();

我正在尝试将模型中的多个属性组合到下拉列表的文本中。这显示了编译时错误,但是如果我将其更改为

ViewBag.VendorID = new SelectList(db.Vendors.Select(v => new SelectListItem
{
    Value = v.ID.ToString(),
    Text = string.Format("{0} {1} {2}", v.Title, v.Firstname, v.Secondname)
}), "Text", "Value");

然后从我看来这一行

@Html.DropDownList("VendorID", (SelectList)ViewBag.VendorID)

引发运行时错误:

  

LINQ to Entities无法识别方法'System.String ToString()'方法,并且此方法无法转换为商店表达式。

关于如何解决这个看似简单的任务的任何想法

谢谢大家。

杰森。

1 个答案:

答案 0 :(得分:3)

您无法在Linq-to-SQL中直接使用string.Format。您需要首先枚举列表:

ViewBag.VendorID = db.Vendors.ToList().Select(v => new SelectListItem
{
    Value = v.ID,
    Text = string.Format("{0} {1} {2}", v.Title, v.Firstname, v.Secondname)
});

return View();

请注意上面添加了.ToList()。我还删除了SelectList构造函数,因为DropDownList已经接受了您自己生成的IEnumerable<SelectListItem>