LINQ to Entities 无法识别方法“System.Web.Mvc.FileResult”

Posted

技术标签:

【中文标题】LINQ to Entities 无法识别方法“System.Web.Mvc.FileResult”【英文标题】:LINQ to Entities does not recognize the method 'System.Web.Mvc.FileResult' 【发布时间】:2015-12-03 09:00:12 【问题描述】:

我正在尝试使用他们的图像显示多个用户名所以,我有一个这样的 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)' 方法,和这个方法 无法翻译成商店表达式。

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

【问题讨论】:

那么您是否尝试过对其他问题应用相同的推理来解决您的情况?基本上,您几乎可以肯定只需要AsEnumerable() before 选择,例如db.Users.OrderBy(user => user.UserName).AsEnumerable().Select(user => new user.UserName, Pic = GetFileData(user.Id) ) 您至少要在select 之前实现您的查询(例如.ToList() 我从未尝试将FileResult 序列化为 Json,但我并不感到惊讶不会工作。我怀疑您需要以 Base64 格式发送图像 @duke:鉴于它们与问题相关,它们应该问题中。 但无论如何我们已经解决了问题中的问题 - 我们不知道新异常的堆栈跟踪是什么样的。您应该就该问题提出一个新问题。 【参考方案1】:

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

【讨论】:

以上是关于LINQ to Entities 无法识别方法“System.Web.Mvc.FileResult”的主要内容,如果未能解决你的问题,请参考以下文章

LINQ to Entities 无法识别方法 IsNullOrWhiteSpace

错误:LINQ to Entities 无法识别方法 DataLength

LINQ To Entities 无法识别方法 Last。真的吗?

LINQ To Entities 无法识别方法 Last。真的吗?

C# LINQ to Entities 无法识别方法“布尔”

我如何修复“LINQ to Entities无法识别方法”错误