我有一个返回数据的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();
答案 0 :(得分:0)
它试图在数据库上执行内部ToList。而SQL服务器并不知道如何做到这一点。您可以尝试仅获取数据,然后在获取结果后构建输出模型。