2012-12-25 20 views
11

Przechowuję bajty w tabeli bazy danych. Po pobraniu go z Linq 2 sql otrzymuję typ zwrotu w system.data.linq.Binary.Konwertuj system.data.linq.binary na bajt []

Nie mogę przekonwertować system.data.linq.binary na tablicę bajtów (byte[]).

Jak mogę go przekonwertować?

///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; 

i.data jest linq.binary chcę go mieć w byte[].

Próbowałem z (byte[])img, ale to nie zadziałało.

+0

Jak zmieniłeś 'Binary' na' byte'? – spajce

Odpowiedz

0

Możesz wypróbować MemoryStream. Napisałem funkcję w moim projekcie, aby przekonwertować obraz na tablicę bajtów, tak jak poniżej:

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

Mam nadzieję, że to pomocne!

+0

nope dude dosent wrk Używam linq do sql, aby "pobrać" wartość i odczytać ją do konwersji tablicy bajtowej z System.Data.Linq.Binary na System.byte [] – user1797079

+0

Ta odpowiedź jest nieprzydatna - pytanie zadaje o konwersji 'System.Data.Linq.Bin ary' na' byte [] 'ale ten przykład konwertuje ścieżkę pliku do reprezentacji' byte [] ', z' Bitmapą 'pomiędzy. –

+0

Odpowiedź nie dotyczy pytania PO. Odpowiedź nie zawiera żadnego odniesienia do typu Linq.Binary, który stanowi 50% tego, co szuka OP. Przed wysłaniem odpowiedzi przeczytaj dokładnie to pytanie. – Bertie

24

Czy próbowałeś dzwonić pod numer ToArray() pod numerem i.data?

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

System.Data.Linq.Binary ma ToArray metodę tylko do tego celu.

+0

ya it dosent work man to zwraca System.Data.Linq.Binary [] tablica binarnych to: ( – user1797079

+0

plus mamy hav używać go jako 'var img = (od i w db.images gdzie i.id = = klucz wybierz i.data) .ToArray(); ' – user1797079

+1

Wywołanie' ToArray() 'musi być włączone' i.data' .Układasz wywołanie po nawiasach, to dostaniesz 'IEnumerable 'a następnie wywołuje' ToArray' na tym 'IEnumerable' .Myślę, że może istnieć tylko jeden obraz z tym kluczem. Następnie wygląda na to, że chcesz' var img = (od i w db.images gdzie i.id == klucz wybierz i.data) .First(). ToArray(); 'Prawdopodobnie chcesz zerowej kontroli po' First() '. –

5

prawdopodobnie jego zbyt późno teraz ale może pomóc innym :)

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

albo kliknij pole binarne z .dbml plik, otwórz właściwości, a następnie zmienić typ pola z Binary do byte[] jak znaleźć here

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

Not ius t zamieszczając odpowiedź, możesz dodać małe wyjaśnienie, które lepiej zrozumiałoby rozwiązanie dla OP i przyszłych czytelników. –