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