0

データベースにテーブルがあり、その列の 1 つが画像データ型です。イメージをデータベースに保存できますが、取得できません。ログインしている各ユーザーの画像を取得したい。私はこのコードを使用しました:

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[]

format but File には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 に答える