我正在使用MVC4,我必须使用代码优先迁移来更新我的数据库.我试图做的是从数据库表中 Select 记录,并将它们插入一个下拉列表中,用户可以在其中 Select 一个.

我有一个我不明白的错误:

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

Controller:

  public ActionResult Addnew()
        {
            var dba = new DefaultConnection();
            var query = dba.blob.Select(c => new SelectListItem
            {
                Value = c.id.ToString(),
                Text = c.name_company,
                Selected = c.id.Equals(3)
            });
            var model = new Companylist
            {
                xpto = query.AsEnumerable()
            };

            return View(model);
        }

推荐答案

出现此错误是因为实体框架不知道如何在sql中执行.ToString()方法.因此,您应该使用ToList加载数据,然后将其转换为SelectListItem,如下所示:

var query = dba.blob.ToList().Select(c => new SelectListItem
    {
    Value = c.id.ToString(),
    Text = c.name_company,
    Selected = c.id.Equals(3)
});

编辑:为了更清楚,实体框架将您使用的查询操作符(如SelectWhere等)转换为SQL查询来加载数据.如果调用像ToString()这样的方法,而Entity Framework在SQL中没有对应的方法,它会抱怨.因此,我们的 idea 是推迟在数据加载后使用这些函数.ToListToArray等强制执行查询,从而加载数据.加载数据后,将使用Linq to Objects对内存中已有的数据执行任何进一步的操作(如SelectWhere等).

Asp.net相关问答推荐

如何从 ASP.NET 中的代码隐藏文件访问 IFRAME?

MSCharts找不到请求类型'GET'的http处理程序错误

是否可以访问位于另一个项目中的 MVC 视图?

解析器错误消息:文件/TestSite/Default.aspx.cs不存在

是否可以使用 Membership API 更改用户名

用于链接字符串中的 url 的 C# 代码

Web Api 请求内容在操作过滤器中为空

如何在 ASP.NET 应用程序中使用 jQuery 捕获提交事件?

使用域用户的 SQL 连接字符串?

您对 Windows Workflow Foundation 有何体验?

如何从 URI 中删除 PROTOCOL

ASP.NET RadioButton 与名称(组名)混淆

ASP.NET 会话超时测试

如何获取 ASP.NET 应用程序的完整虚拟路径

单击按钮时播放哔声

您正在使用哪些身份验证和授权方案 - 为什么?

如何将参数传递给 ASP.NET MVC 2 中的自定义 ActionFilter?

global.asax 中的 Application_Error 未捕获 WebAPI 中的错误

asp.net core 2.0 - 值不能为空.参数名称:连接字符串

解耦 ASP.NET MVC 5 标识以允许实现分层应用程序