Конвертировать system.data.linq.binary в байт []

Я сохраняю байты в таблице базы данных. Когда я получаю его с Linq 2 sql, я получаю возвращаемый тип в system.data.linq.Binary.

Я не могу преобразовать массив system.data.linq.Binary в байты (byte[]).

Как его преобразовать?

///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 находится в linq.binary Я хочу, чтобы он находился в byte[].

Я пытался с (byte[])img, но это не сработало.

Ответ 1

Вы пытались позвонить ToArray() на i.data?

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

System.Data.Linq.Binary имеет метод ToArray только для этой цели.

Ответ 2

Возможно, это слишком поздно, но может помочь другим:)

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

Или иначе, щелкните по двоичному полю из файла .dbml, откройте свойства, а затем измените тип поля с двоичного на byte[], как найдено здесь

Ответ 3

Вы можете попробовать MemoryStream. Я написал функцию в моем проекте для преобразования изображения в байтовый массив следующим образом:

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

Надеюсь, что вам будет полезно!

Ответ 4

(byte[])linqBinaryField.ToArray()