Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LINQ to Entities does not recognize the method 'System.String ToString()' method in MVC 4

I'm working with MVC 4 and I have to update my database using Code First Migrations. What I'm trying to do is to select records from a database table, and insert them into a dropdown list where the user can select one.

I have an error that I don't understand:

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);         } 
like image 872
user2232273 Avatar asked Aug 14 '13 13:08

user2232273


1 Answers

You got this error because Entity Framework does not know how to execute .ToString() method in sql. So you should load the data by using ToList and then translate into SelectListItem as:

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

Edit: To make it more clear, Entity framework converts your use of query operators such as Select, Where ETC into an sql query to load the data. If you call a method like ToString(), which Entity Framework does not have an equivalent in sql, it will complain. SO the idea is to defer the use of such functions post data load. ToList, ToArray ETC force execution of the query thus loading of data. Once the data is loaded, any further operation (such as Select, Where ETC) is performed using Linq to Objects, on the data already in memory.

like image 168
Varun K Avatar answered Sep 20 '22 15:09

Varun K