LINQ to Entities不能识别方法'System.Web.Mvc.FileResult'

我想显示多个用户名与他们的形象所以,我有一个像这样的Json动作方法:

public JsonResult GetUsers() { var ret = (from user in db.Users orderby user.UserName select new { UserName = user.UserName, Pic = GetFileData(user.Id), }).AsEnumerable(); return Json(ret, JsonRequestBehavior.AllowGet); } 

这是我的GetFileData方法来获取用户的图像:

 public FileResult GetFileData(int Id) { var avatarImage = db.Files.SingleOrDefault(s => s.ApplicationUserId == Id); return File(avatarImage.Content, avatarImage.ContentType); } 

这里, ApplicationUserId是与File和ApplicationUser类有关的外键。

现在,当我运行查询,我应该得到用户名与他们的照片但是我得到System.NotSupportedException 。完整的错误信息是:

LINQ to Entities不能识别方法“System.Web.Mvc.FileResult GetFileData(Int32)”的方法,并且此方法不能被转换成存储expression式。

如何得到它的解决。我已经看到了很多与它有关的stackoverflow问题,但没有一个问题是关于FileResult。查看页面的代码在这里http://pastebin.com/AyrpGgEm

无法将GetFileData转换为T-SQL,Linq to Entities无法识别它。 您可以如下修改代码(将expression式移出GetFileData ):

 var pic = GetFileData(user.Id); public JsonResult GetUsers() { var ret = (from user in db.Users orderby user.UserName select new { UserName = user.UserName, Pic = pic, }).AsEnumerable(); return Json(ret, JsonRequestBehavior.AllowGet); } 

但是因为用户不在查询之外,所以你应该使用.ToList()来推迟你的函数的使用。 使用.ToList()加载数据后,将使用Linq to Objects对已存在于内存中的数据执行任何其他操作(如select )。 所以你的查询应该是这样的:

 public JsonResult GetUsers() { var ret = (from user in db.Users.ToList() orderby user.UserName select new { UserName = user.UserName, Pic = GetFileData(user.Id), }).AsEnumerable(); return Json(ret, JsonRequestBehavior.AllowGet); }