LINQ to Entities不识别方法';系统网状物Mvc.FileResult';

本文关键字:系统 网状物 Mvc FileResult to Entities 识别 方法 LINQ | 更新日期: 2023-09-27 18:25:24

我正试图用它们的图像显示多个用户名。因此,我有一个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无法识别该方法’系统。网状物Mvc。FileResult GetFileData(Int32)"方法,以及此方法无法转换为存储表达式。

如何解决。我见过许多与之相关的stackoverflow问题,但没有一个问题与FileResult有关。查看页面的代码在这里http://pastebin.com/AyrpGgEm

LINQ to Entities不识别方法';系统网状物Mvc.FileResult';

GetFileData无法转换为t-SQL,Linq to Entities无法识别它。您可以如下修改代码(将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(),任何进一步的操作(如select)都将使用Linq to Objects对内存中已有的数据执行。所以你的查询应该是这样的:

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);
}
相关文章: