2017-02-26 3 views
0

Ich habe Winforms, die PictureBox-Formular enthält, möchte ich ein IMG von DB zu diesem Steuerelement mit LINQ abrufen.CS1061: Abrufen von Bild von DB zu PictureBox-Steuerelement

Dies ist der Fehler beim Kompilieren,

CS1061: IQueryable finden keine Definition für Bild und keine Erweiterungsmethode Bild enthalten ein erstes Argument vom Typ IQueryable akzeptieren könnte (möglicherweise fehlt eine using-Direktive oder eine Baugruppe ? Referenz)

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

Antwort

0

Ihr Problem ist ImageToByteArray nimmt ein Bild als varieble, aber sie verwendet, um dieses:

ByteArrayToImage(q.Image.ToArray()); 

Die verwenden diese Funktion mit einem Array als variebel.

Nach q von SQL bekommen (wenn q ein Byte-Array ist)

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


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

und ein Verfahren

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

Sie mit dem Namensraum System.Drawing.Image

+0

ich nicht vergessen entfernt es aber immer noch der Fehler in .Image – Emi

+0

Was meinst du es entfernen? Sie müssen das bearbeiten. und was ist der Fehler? Was ist das ** img **? –

+0

Ich dachte, du meinst, ich sollte das Array entfernen. Wie kann ich es bearbeiten? Im Parameter q.Image.ToArray() befindet sich die rote Linie unter dem Bild. – Emi