LINQ to Entities no reconoce el método ‘System.Web.Mvc.FileResult’

Estoy tratando de mostrar múltiples nombres de usuario con su imagen Entonces, tengo un método de acción Json como este:

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

Y este es mi método GetFileData para obtener la imagen del usuario:

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

Aquí, ApplicationUserId es la clave externa que relaciona la clase File y ApplicationUser .

Ahora, cuando ejecuto la consulta, debería obtener un nombre de usuario con su foto, pero recibo System.NotSupportedException . El mensaje de error completo es:

LINQ to Entities no reconoce el método ‘System.Web.Mvc.FileResult GetFileData (Int32)’, y este método no se puede traducir a una expresión de tienda.

Cómo resolverlo. He visto muchas preguntas sobre el stackoverflow que lo relacionan, pero ninguna de las preguntas se refería a FileResult. El código para ver la página está aquí http://pastebin.com/AyrpGgEm

GetFileData no se pudo traducir a T-SQL, Linq a Entidades no pudo reconocerlo. Puede modificar el código como a continuación (Mover GetFileData fuera de expresión):

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

Pero como el usuario no existe fuera de la consulta, debe usar .ToList() para diferir el uso de su función. Con .ToList() después de que se carguen los datos, cualquier operación adicional (como la select ) se realiza utilizando Linq to Objects , en los datos que ya están en la memoria. Entonces su consulta debería ser así:

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