2012-12-25 9 views
11

Sto memorizzando i byte in una tabella di database. Quando lo recupero con Linq 2 sql ottengo il tipo restituito in system.data.linq.Binary.convertire system.data.linq.binary in byte []

io non sono in grado di convertire il system.data.linq.binary di array di byte (byte[]).

Come si converte?

///my datacontext 

var db = new db(); 

//key is an value from user 

var img = from i in db.images 
      where i.id == key 
      select i.data; 

il i.data è in linq.binary io voglio che sia in byte[].

Ho provato con (byte[])img ma non ha funzionato.

+0

come è stato modificato il 'Binario' in' byte'? – spajce

risposta

0

Si può provare MemoryStream. Ho scritto una funzione nel mio progetto per convertire un'immagine in array di byte come la seguente:

public static byte[] Image2ByteArr(string filename) 
    {    
     Bitmap bm = new Bitmap(getPath(filename)); 
     MemoryStream ms = new MemoryStream(); 
     bm.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
     return ms.ToArray(); 
    } 

speranza che utile per voi!

+0

nope dude dosent wrk sto usando linq to sql per "recuperare" il valore e leggerlo nella conversione di array di byte è da System.Data.Linq.Binary a System.byte [] – user1797079

+0

Questa risposta non è utile - la domanda chiede sulla conversione di un 'System.Data.Linq.Bin ary' in un' byte [] 'ma questo esempio converte un percorso di file in una rappresentazione' byte [] ', con una' Bitmap' in mezzo. –

+0

La risposta non è relativa alla domanda dell'OP. La risposta non contiene alcun riferimento al tipo Linq.Binary, che è il 50% di ciò che l'OP sta cercando. Si prega di leggere la domanda correttamente prima di inviare una risposta. – Bertie

24

Hai provato a chiamare ToArray() su i.data?

var img = from i in db.images 
     where i.id == key 
     select i.data.ToArray(); 

System.Data.Linq.Binary ha un metodo ToArray solo per questo scopo.

+0

ya dosent work man restituisce System.Data.Linq.Binary [] la matrice di binario questo è :( – user1797079

+0

in più dobbiamo usarlo come 'var img = (da i in db.images dove i.id = = chiave selezionare i.data) .ToArray(); ' – user1797079

+1

La chiamata' ToArray() 'deve essere su' i.data'. Stai mettendo la chiamata dopo le parentesi .Questo ti porterà un 'IEnumerable 'e quindi chiamate' ToArray' su quel 'IEnumerable'. Suppongo che ci possa essere solo un'immagine con quella chiave, quindi sembra che tu voglia' var img = (da i in db.images dove i.id == tasto seleziona i.data) .First(). ToArray(); 'Probabilmente vuoi un controllo Null dopo' Primo() '. –

5

Probabilmente è troppo tardi ormai, ma può aiutare gli altri :)

//testTable PK:ID, binaryData :binary(32) 

public void insertDummyData() 
{ 
    DBML.testTable v = new DBML.testTable(); 
    v.ID = 1; 

    System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); 
    v.binaryData = new System.Data.Linq.Binary(encoding.GetBytes("11111111000000001111111100000000"));                  

    db.testTable.InsertOnSubmit(v); 
    db.SubmitChanges(); 
} 

oppure, Fare clic sul campo binario da file .dbml, proprietà aperte e quindi modificare il tipo di campo da binario a byte[] come si trova

0
(byte[])linqBinaryField.ToArray() 
+1

Non valido Quando si invia una risposta, è possibile aggiungere una piccola spiegazione che comprenda meglio la soluzione per i lettori OP e futuri. –