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。真的吗?