LINQ to Entities仅支持转换实体数据模型基元类型?

时间:2011-12-13 21:30:58

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

我正在尝试在我的视图中填充下拉列表。任何帮助是极大的赞赏。感谢。

错误:

  

无法将类型'System.Int32'强制转换为'System.Object'。

     

LINQ to Entities仅支持转换实体数据模型基元类型。

控制器:

ViewBag.category = (from c in new IntraEntities().CategoryItems
                   select new SelectListItem() {Text=c.Name, Value=""+c.ID }).ToList<SelectListItem>();

查看:

Category:<br />@Html.DropDownList("category", (List<SelectListItem>)ViewBag.category)

6 个答案:

答案 0 :(得分:20)

这个怎么样:

ViewBag.category = 
    from c in new IntraEntities().CategoryItems.ToList()
    select new SelectListItem 
    {
        Text = c.Name, 
        Value = c.ID.ToString() 
    };

以及如何使用强类型视图模型而不是ViewBag的一些弱类型的废话(这是我称之为的方式)?

像这样:

public class CategoryViewModel
{
    public string CategoryId { get; set; }
    public IEnumerable<SelectListItem> Categories { get; set; }
}

然后:

public ActionResult Foo()
{
    var model = new CategoryViewModel
    {
        Categories = 
            from c in new IntraEntities().CategoryItems.ToList()
            select new SelectListItem 
            {
                Text = c.Name, 
                Value = c.ID.ToString() 
            }
    };
    return View(model);
}

最后在你的强类型视图中:

@model CategoryViewModel
@using (Html.BeginForm())
{
    @Html.DropDownListFor(x => x.CategoryId, Model.Categories)
    <button type="submit">OK</button>
}

好多了,你不觉得吗?

答案 1 :(得分:5)

您可以在转换之前将查询转换为.AsEnumerable()以强制它使用Linq to Objects进行转换,但最好使用System.Data.Objects.SqlClient.SqlFunctions中提供的SQL兼容函数。像这样:

(from c in new IntraEntities().CategoryItems
select new SelectListItem() { 
    Text = c.Name, 
    Value = SqlFunctions.StringConvert((double)c.ID).TrimStart() 
})

答案 2 :(得分:0)

ViewBag.category = (from c in new IntraEntities().CategoryItems
                   select new SelectListItem {Text=c.Name, Value=c.ID.ToString()})
.ToList<SelectListItem>();

答案 3 :(得分:0)

错误说,你试图用整数值连接字符串。在linq查询中不可能。 要将int转换为字符串,您可以使用

SqlFunctions.StringConvert((decimal?)intProperty) 

答案 4 :(得分:0)

您可以使用SQL函数进行如下转换:

ViewBag.category = (from c in new IntraEntities().CategoryItems
                   select new SelectListItem() {
Text=c.Name, 
Value=SqlFunctions.StringConvert((double) c.ID) }).ToList<SelectListItem>();

但不要忘记在文件顶部包含此命名空间:

使用System.Data.Objects.SqlClient;

答案 5 :(得分:0)

是的,你正试图&#34;用整数值连接字符串。在linq查询中不可能&#34;就像Nalan M所说的那样。确保它是您尝试获取的数据库中的列。对我来说就是这样。我指的是错误的专栏。我打电话给这个班级是因为显然有人为这个房产做了一个班级。如果您在visual studio中工作,则可以检查数据库并查看您正在呼叫的内容。这样你就可以回答这个问题:&#34;我想要的列在哪里?&#34;在数据库中。