我将字节存储在数据库表中。当我使用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
,但它没有用。
答案 0 :(得分:30)
您是否尝试在ToArray()
上致电i.data
?
var img = from i in db.images
where i.id == key
select i.data.ToArray();
System.Data.Linq.Binary
只有ToArray
方法才能实现此目的。
答案 1 :(得分: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();
}
或者,单击.dbml文件中的二进制字段,打开属性,然后将字段类型从二进制更改为byte[]
,如找到here
答案 2 :(得分:3)
(byte[])linqBinaryField.ToArray()
答案 3 :(得分: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();
}
希望对你有所帮助!