2017-02-26 62 views
0

我有winforms包含pictureBox窗體,我想從數據庫檢索img到該控件使用LINQ。CS1061:從DB到PictureBox控件檢索圖像

這是編譯時的錯誤,

CS1061:IQueryable的不包含圖像的定義,並沒有擴展方法的圖像接受類型的IQueryable的第一個參數可以找到(是否缺少使用指令或程序集?參考)

private void pictureBox1_Click(object sender, EventArgs e) 
    { 
     // Get as single image from the database 
     var q = from image in context.Products 
       where image.Pro_ID == 1 
       select image; 
     // Convert the byte[] to an System.Drawing.Image 
     img.Image = ByteArrayToImage(q.Image.ToArray()); 
    } 

    private byte[] ImageToByteArray(System.Drawing.Image imageIn) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); 
      return ms.ToArray(); 
     } 
    } 

回答

0

你的問題是ImageToByteArray接受的圖像作爲varieble但可以用這個方法:

ByteArrayToImage(q.Image.ToArray()); 

這個函數使用了一個數組作爲varieble。

從SQL得到Q(如果q是一個字節數組)

var q = (from x in context.Products 
       where x.Pro_ID == 1 
       select x.Image).FirstOrDefault(); 


Image image1 = byteArrayToImage((byte[])q); 

和方法

public Image byteArrayToImage(byte[] byteArrayIn) 
{ 
    using (var ms = new MemoryStream(byteArrayIn)) 
    { 
     return Image.FromStream(ms); 
    } 
} 

使用名稱空間爲System.Drawing.Image

+0

我不要忘記之後刪除它,但仍然在錯誤.Image – Emi

+0

你的意思是刪除它?你必須編輯它。什麼是錯誤? ** img **是什麼? –

+0

我以爲你的意思是我應該刪除陣列。我如何編輯它?在參數q.Image.ToArray()中,紅線在圖像下。 – Emi