【问题标题】:Problem with JsonJson 的问题
【发布时间】:2009-09-16 17:37:06
【问题描述】:

我在动态创建 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()
        };

【问题讨论】:

    标签: asp.net-mvc linq json


    【解决方案1】:

    我不确定这是否能解决您的问题,但假设 companies 是来自 DataContext 的 IQueryable,请尝试对其调用 ToList() 以便选择表达式不会发送到数据库。

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

    【讨论】:

    • 优秀!!..正是我需要的
    • 时髦。去黑暗中刺杀!
    【解决方案2】:

    它试图将i 转换为 SQL 并失败。生成的查询接近

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

    基本上,您的字符串连接正在发送到您的 SQL 服务器。

    【讨论】:

    • 但它并没有失败......唯一失败的是第一个......不同之处在于,在第一个中我使用 Url.Action 而在第三个中我使用硬编码的 url .
    • 那么尝试将 Url.Action() 发送到 SQL 时会失败吗?您是否收到类似于“URL.Action() 不包含有效的 SQL 转换”的 SQL 错误消息?
    猜你喜欢
    • 2011-10-22
    • 1970-01-01
    • 2011-07-28
    • 2011-10-24
    • 2013-01-05
    • 2021-03-16
    • 2010-12-27
    • 2021-09-12
    • 2017-11-13
    相关资源
    最近更新 更多