Проблема с Джсоном - PullRequest
       18

Проблема с Джсоном

1 голос
/ 16 сентября 2009

У меня странная проблема с динамическим созданием Json .... по какой-то причине это не работает

var jsonData = new
        {
            total = totalPages,
            page = page,
            records = totalRecords,
            rows = (
                from company in companies
                select new
                {
                    i = company.Id,
                    cell = new string[] { company.Id.ToString(), "<a href=\""+Url.Action("Edit",new{id=company.Id})+"\">"+company.Name.ToString()+"</a>" }
                }).ToArray()
        };

Это дает мне странное исключение "Не удалось перевести выражение ....... в sql"

но с этим небольшим изменением он работает просто отлично

var jsonData = new
            {
                total = totalPages,
                page = page,
                records = totalRecords,
                rows = (
                    from company in companies
                    select new
                    {
                        i = company.Id,
                        cell = new string[] { company.Id.ToString(), "<a href=\""+Url.Action("Edit",new{id=5})+"\">"+company.Name.ToString()+"</a>" }
                    }).ToArray()
            };

Обратите внимание, что изменение состоит в том, чтобы сделать id = 5 вместо динамического.

также, это работает правильно, но мне это не нравится.

var jsonData = new
        {
            total = totalPages,
            page = page,
            records = totalRecords,
            rows = (
                from company in companies
                select new
                {
                    i = company.Id,
                    cell = new string[] { company.Id.ToString(), "<a href=\"Edit/"+company.Id+"\">"+company.Name.ToString()+"</a>" }
                }).ToArray()
        };

Ответы [ 2 ]

1 голос
/ 16 сентября 2009

Я не уверен, решит ли это вашу проблему, но предполагая, что companies является IQueryable из DataContext, попробуйте вызвать ToList () для него, чтобы выражение select не отправлялось в базу данных.

var jsonData = new
{
    total = totalPages,
    page = page,
    records = totalRecords,
    rows = (
        from company in companies.ToList()
        select new
        {
            i = company.Id,
            cell = new string[] { company.Id.ToString(), "<a href=\""+Url.Action("Edit",new{id=company.Id})+"\">"+company.Name.ToString()+"</a>" }
        }).ToArray()
};
0 голосов
/ 16 сентября 2009

Он пытается перевести i в SQL и не работает. Сгенерированный запрос является чем-то близким к

SELECT companies.Id,
    '<a href=\"Edit/' + companies.Id + '\">' + companies.Name + '</a>'
FROM companies

По сути, ваша конкатенация строк отправляется на ваш SQL-сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...