Saurabhbhatt
Saurabhbhatt

Reputation: 433

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

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

    public ActionResult PopulateFromDB(string sidx, string sord, int page, int rows)
    {
        var context = new NerdDinnerEntities();
        var jsonData = new
        {
            total = 1,
            page = page,
            sord =sord,
            records = context.Authors.Count(),
            rows = (from n in context.Authors
                    select new
                    { AuthorId = n.AuthorId ,
                        cell = new string[] { n.AuthorId.ToString(), n.Name.ToString(), n.Location.ToString() }
                    }).ToList()
        };
        return Json(jsonData, JsonRequestBehavior.AllowGet);
    }

I am writting ToList or Toarray is it not working the error comes :

    public ActionResult PopulateFromDB(string sidx, string sord, int page, int rows)
    {
        var context = new NerdDinnerEntities();
        var jsonData = new
        {
            total = 1,
            page = page,
            sord =sord,
            records = context.Authors.Count(),
            rows = (from n in context.Authors
                    select new
                    { AuthorId = n.AuthorId ,
                        cell = new string[] { n.AuthorId.ToString(), n.Name.ToString(), n.Location.ToString() }
                    }).ToList()
        };
        return Json(jsonData,JsonRequestBehavior.AllowGet); 
    }

Upvotes: 0

Views: 1344

Answers (2)

Yograj Gupta
Yograj Gupta

Reputation: 9869

You should try SqlFunctions.StringConvert to convert this, There is no overload for int so you should cast your number to a double or a decimal.

public ActionResult PopulateFromDB(string sidx, string sord, int page, int rows)
{
    var context = new NerdDinnerEntities();
    var jsonData = new
    {
        total = 1,
        page = page,
        sord =sord,
        records = context.Authors.Count(),
        rows = (from n in context.Authors
                select new
                { AuthorId = n.AuthorId ,
                  cell = new string[] { SqlFunctions.StringConvert((double)n.AuthorId), n.Name, n.Location }
                }).ToList()
    };
    return Json(jsonData,JsonRequestBehavior.AllowGet); 
}

You are not using LinqToSql Classes, if you were using that your code should work, but as you mention that you are using LinqToEntity then You should use SqlFunctions.StringConvert to convert to string.

Upvotes: 0

James
James

Reputation: 82096

From your code I assume your adding a custom property cell for display/storage purposes on the client-side. I would avoid this as your essentially coupling your API call to one particular client. I would suggest you simply return the data required & deal with it at the client-side specifically e.g.

Server

...
select new
{
    Id = n.AuthorId,
    Name = n.Name,
    Location = n.Location
}).ToList();
...

Client

var response = ...
foreach (var author in response)
{
    var cell = new string[] { author.Id.ToString(), author.Name, author.Location };
    // do something with cell
}

Upvotes: 0

Related Questions