0

我的数据库中有一个表,其中一列是图像数据类型。我可以将图像存储在数据库中,但无法检索它。我想为每个登录的用户检索图像。我使用了这段代码:

public ActionResult ShowImage()
{
    var userID = GetUserID();
    var advert = from ad in StoreDb.Ads where ad.UserId == userID select ad.AdImage;
    return File(advert, "Image");     
}

但是得到了这个错误:

错误 2 参数 1:无法从 'System.Linq.IQueryable' 转换为 'string' C:\Users\Tena\Documents\Visual Studio 2010\Projects\MvcApplication6\MvcApplication6\Controllers\Default3Controller.cs 92 25 MvcApplication6

问题是广告在

System.Linq.IQueryable<>byte[]

格式,但文件需要byte[]格式。我现在该怎么办?任何答案都是有帮助的。

谢谢

4

2 回答 2

2

我不确定,这是解决这个问题的方法。我通常实现一个自定义的 http 处理程序,它需要一些 id(例如 userid),连接到数据库,获取图片并返回具有图片正确 mime 类型的字节流。

在“视图”中,我只是创建一个带有 http 处理程序的 url 作为图像源的图像标记。

于 2012-06-01T11:35:24.280 回答
2

问题是没有对 LINQ 查询进行评估,并且目前的查询理论上可以返回多个结果(因此它是一个IQueryable)。

实际上,查询看起来不正确,因为可能会有多个广告针对特定用户,而且我不希望在任何情况下都根据用户存储广告,但我对您的数据一无所知结构,因此我将尝试帮助您使查询正常工作,您可以稍后对其进行改进。

尝试更改此行:

var advert = from ad in StoreDb.Ads where ad.UserId == userID select ad.AdImage;

对此:

var advert = (from ad in StoreDb.Ads where ad.UserId == userID select ad.AdImage).FirstOrDefault();

我可以为您提供有关如何执行此操作的其他提示,但请先尝试一下,看看会发生什么。

于 2012-06-01T11:38:48.710 回答