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

17

我正在将字节存储在数据库表中。当我使用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.datalinq.binary 中,我希望它是 byte[] 类型。

我尝试过使用(byte[])img 但并不起作用。


你是如何将“Binary”更改为“byte”的? - spajce
4个回答

41

你尝试过在i.data上调用ToArray()方法吗?

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

System.Data.Linq.Binary有一个专门用于此目的的ToArray方法。


哎呀,不行啊,它返回的是 System.Data.Linq.Binary[] 这个二进制数组,就这样 :( - user1797079
另外,我们需要将其用作 var img = (from i in db.images where i.id == key select i.data).ToArray(); - user1797079
3
ToArray() 调用必须在 i.data 上进行。您将调用放在括号后面。这将为您提供一个 IEnumerable<System.Data.Linq.Binary[]>,然后您在该 IEnumerable 上调用 ToArray。我假设只能有一个具有该键的图像。然后看起来您想要 var img = (from i in db.images where i.id == key select i.data).First().ToArray();First() 之后可能需要进行空值检查。 - Mike Two
+1,这在其他人那里有效。 - Jens Kloster

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 文件中点击二进制字段,打开属性,然后将字段类型从 Binary 更改为 byte[], 参见这里


4
(byte[])linqBinaryField.ToArray()

1
不仅仅是发布答案,您还可以添加一些解释,以便更好地理解解决方案,同时也方便原帖作者和未来的读者。 - Balagurunathan Marimuthu
完美运行,我认为不需要进一步解释。 - janv8000
类型转换是多余的。 - Fred

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

希望对你有所帮助!


不行,伙计。我正在使用LINQ to SQL来“检索”该值并将其读入字节数组。转换是从System.Data.Linq.Binary到System.byte[]。 - user1797079
这个答案并不有用——问题是关于将 System.Data.Linq.Binary 转换为 byte[],但是这个例子将文件路径转换为 byte[] 表示,并在其中加入了一个 Bitmap - Cᴏʀʏ
答案与提问者的问题无关。答案中没有提到 Linq.Binary 类型,而这正是提问者寻找的50%内容。请在发布答案前仔细阅读问题。 - Bertie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接