LINQ to Entities在MVC 4中无法识别方法'System.String ToString()'方法。

9 浏览
0 Comments

LINQ to Entities在MVC 4中无法识别方法'System.String ToString()'方法。

我正在使用MVC 4,并且必须使用Code First Migrations来更新我的数据库。我想要做的是从数据库表中选择记录,并将它们插入到一个下拉列表中,用户可以选择其中一个。

我遇到了一个我不理解的错误:

LINQ to Entities不识别'System.String ToString()'方法,并且该方法无法转换为存储表达式。

控制器:

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);
}

0
0 Comments

在MVC 4中,出现了一个问题,即(LINQ to Entities does not recognize the method 'System.String ToString()' method)。下面将介绍这个问题的原因和解决方法。

原因:

问题出现的原因是,在LINQ to Entities中,无法识别ToString()方法。在MVC 4中,当我们使用LINQ查询数据库时,LINQ会将查询转换为SQL语句并发送到数据库执行。然而,LINQ to Entities只能识别特定的方法,无法识别一些常见的.NET方法,如ToString()。

解决方法:

为了解决这个问题,我们可以使用一个简单的技巧。我们可以将需要转换为字符串的属性值与一个空字符串相加。这样,LINQ to Entities会将其识别为字符串连接操作,而不是ToString()方法。

具体的解决方法如下:

Value = c.id + ""

代替

Value = c.id.ToString()

这样做的好处是,我们不需要从数据库中检索所有数据,从而减少了数据库的负担。同时,这种方法简单易用,可以很容易地解决这个问题。

在MVC 4中,当使用LINQ to Entities进行数据库查询时,我们需要注意ToString()方法无法被识别的问题。为了解决这个问题,我们可以使用将属性值与空字符串相加的方法来实现字符串转换。这样可以避免从数据库中检索所有数据,并且解决这个问题非常简单。希望本文对你有所帮助!

0
0 Comments

这个错误的出现是因为Entity Framework不知道如何在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)
});

编辑:为了更清楚,Entity Framework将你对查询操作符(如`Select`,`Where`等)的使用转换为SQL查询来加载数据。如果你调用像`ToString()`这样的方法,Entity Framework在SQL中没有相当的方法,它会报错。所以,思路就是在数据加载之后再使用这样的函数。`ToList`,`ToArray`等强制执行查询,从而加载数据。一旦数据加载完毕,任何进一步的操作(如`Select`,`Where`等)将在内存中已有的数据上使用Linq to Objects执行。

这种方法的主要问题是,如果你从一个包含成千上万条记录的表中进行选择 - `ToList`将把它们全部从数据库拉到一个对象中,然后你又对该对象进行另一个选择。这非常低效 - 最好使用`SqlFunctions`:`Value = SqlFunctions.StringConvert(c.id)`。

VarunK和NaytGrochowski都给出了很棒的解释。

0
0 Comments

问题出现的原因是LINQ to Entities不能识别ToString()方法。解决方法是使用委托(delegate)来解决这个问题。

在MVC 4中,当使用LINQ to Entities查询数据库时,有时会遇到这样的错误:“LINQ to Entities does not recognize the method 'System.String ToString()' method”。这个错误通常出现在使用ToString()方法时,因为LINQ to Entities不能将ToString()方法转换为SQL查询。

要解决这个问题,可以使用委托(delegate)来绕过LINQ to Entities对ToString()方法的限制。委托是一个匿名方法,可以在LINQ查询中使用,而不会引发错误。

下面是一个使用委托来解决这个问题的示例代码:

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

在这个例子中,我们使用了一个委托来将ToString()方法应用于c.id,以便将其转换为字符串。这样就可以避免LINQ to Entities对ToString()方法的限制。

通过使用委托,我们可以成功地将LINQ查询应用于数据库,并且不会遇到“LINQ to Entities does not recognize the method 'System.String ToString()' method”的错误。

在MVC 4中,当使用LINQ to Entities查询数据库时,使用ToString()方法可能会导致错误。为了解决这个问题,可以使用委托来绕过LINQ to Entities对ToString()方法的限制。通过使用委托,我们可以成功地将LINQ查询应用于数据库,并且不会遇到错误。

0