将system.data.linq.binary转换为byte []

use*_*079 14 linq linq-to-sql

我将字节存储在数据库表中.当我用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; 
Run Code Online (Sandbox Code Playgroud)

i.datalinq.binary我希望它是byte[].

我试过(byte[])img但它没有用.

Mik*_*Two 31

你试过打电话ToArray()i.data

var img = from i in db.images
      where i.id == key
      select i.data.ToArray();
Run Code Online (Sandbox Code Playgroud)

System.Data.Linq.Binary有一个ToArray方法只是为了这个目的.

  • `ToArray()`调用必须在`i.data`上.你在括号后面拨打电话.那将是一个`IEnumerable <System.Data.Linq.Binary []>`然后你在`IEnumerable`上调用`ToArray`.我假设只有一个带有该键的图像.然后它看起来你想要`var img =(来自i.in db.images中的i.id == key select i.data).First().ToArray();`你可能想要在`First()之后进行空检查`. (2认同)

Not*_*Fun 5

可能现在已经太晚了但可能会帮助别人:)

//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();
}
Run Code Online (Sandbox Code Playgroud)

或者,单击.dbml文件中的二进制字段,打开属性,然后将字段类型从二进制更改byte[]此处


Ngu*_*ung 0

你可以试试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();
    }
Run Code Online (Sandbox Code Playgroud)

希望对您有帮助!