如何让我的jsonResult返回一个复杂的json返回?

时间:2014-02-01 23:17:44

标签: c# json linq

我有一个返回数据的linq查询,但是我无法将数据返回给浏览器。它抛出了这个令人难以置信的错误:

LINQ to Entities无法识别方法'System.Collections.Generic.List 1[System.Int32] ToList[Int32](System.Collections.Generic.IEnumerable 1 [System.Int32])'方法,并且此方法无法转换为商店表达式。

之前我已经犯过这个错误,但我还没有找到解决方法,更重要的是为什么会这样。

这是我的疑问:

var query = (from c in db.Responses
   join d in db.ResponseDetails on c.ResponseId equals d.ResponseId
   join f in db.UserProfiles on c.UserProfile.UserId equals f.UserId
           where c.QuestionId == id && f.UserId.Equals(userid)
   select new TeamForecastHistory { Id = d.ResponseId,
                               Reason = c.Reason,
                               UserName = f.UserName,
                               DateCreated = c.DateCreated,
                               Values = (from l in db.ResponseDetails 
                                      where l.ResponseId == id
                                      select (int) l.ResponseDetailVal*100  ).ToList()
                            }).ToList();

这是我想要将数据发回的模型:

public class TeamForecastHistory
        {
            public int Id { get; set; }
            public int Userid { get; set; }
            public DateTime DateCreated { get; set; }
            public string Reason { get; set; }
            public string UserName { get; set; }
            public List<int> Values { get; set; }
        }

这是ajax调用:

$.ajax({
         type: 'POST',
         data: { input: 'history', id: test },
         url: "/Forecaster/GetPartialview/"
          }).done(function (data) {
             $("#mydiv").html(data);
       });

更新

按照约翰的建议,我稍微更改了模型,而不是List<int>,而是IEnumrable<int> Values。这会返回数据并且没有给出错误,但它也没有返回值的数据:(这里是返回数据,这是数据集的代表)

0:{
    DateCreated: "/Date(1389222371636)/"
    Id: 122
    Reason: "Reason#1"
    UserName: "jsteve"
    Userid: 0
    Values: []
}

更新

最后一次更新提到了values变量没有返回任何数据,这是因为子查询在where子句中使用了错误的id。有效的完整代码如下:

var query = (from c in db.Responses
         join d in db.ResponseDetails on c.ResponseId equals d.ResponseId
         join f in db.UserProfiles on c.UserProfile.UserId equals f.UserId
         where c.QuestionId == id && f.UserId.Equals(userid)
         select new TeamForecastHistory { Id = d.ResponseId,
                                     Reason = c.Reason,
                                     UserName = f.UserName,
                                     DateCreated = c.DateCreated,
                                     Values = (from l in db.ResponseDetails 
                                              where l.ResponseId == d.ResponseId
                                              select l.ResponseDetailVal*100  )
           }).ToList();

1 个答案:

答案 0 :(得分:0)

它试图在数据库上执行内部ToList。而SQL服务器并不知道如何做到这一点。您可以尝试仅获取数据,然后在获取结果后构建输出模型。