gpt4 book ai didi

c# - LINQ to Entities 无法识别方法 'System.Web.Mvc.FileResult'

转载 作者:行者123 更新时间:2023-11-30 21:53:14 25 4
gpt4 key购买 nike

我试图用他们的图像显示多个用户名所以,我有一个像这样的 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 does not recognize the method 'System.Web.Mvc.FileResult GetFileData(Int32)' method, and this method cannot be translated into a store expression.

如何解决它。我已经看到很多与它相关的 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() 加载数据后,将使用 Linq to Objects 对已经存在的数据执行任何进一步的操作(例如 select)在内存中。所以你的查询应该是这样的:

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

关于c# - LINQ to Entities 无法识别方法 'System.Web.Mvc.FileResult',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34061637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com