错误:System.Data.Linq.Binary'无法转换为'Byte的1维数组'

时间:2009-04-01 04:15:40

标签: vb.net arrays binary n-dimensional

我正在尝试使用linq从数据库返回二进制文件,以便在浏览器中显示。下面使用ado.net的方法有效,但我试图升级到linq,但linq版本返回错误。

    Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) 
    Dim imageId As String = context.Request.QueryString("id")
    Dim ret As DataTable = Nothing
    ret = DPGetImageData.GetImageById(Convert.ToInt64(imageId))

        For Each dt As DataRow In ret.Rows
            For Each c As DataColumn In ret.Columns
                If Not (dt(c) Is Nothing) Then
                    context.Response.Clear()
                    context.Response.BufferOutput = False
                    context.Response.OutputStream.Write(CType(dt.Table.Rows(0).Item("imageData"), Byte()), 0, CInt(dt.Table.Rows(0).Item("imageSize")))
                    context.Response.End()
                End If

            Next
        Next


End Sub

工作Linq版本:

Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
    If Not String.IsNullOrEmpty(Current.Request.QueryString("Id")) Then
        Dim imageId = HttpContext.Current.Request.QueryString("Id")
        Dim result = repository.FindById(Convert.ToInt64(imageId)).imageData.ToArray
        HttpContext.Current.Response.BinaryWrite(result)
        context.Response.End()

    End If
End Sub

2 个答案:

答案 0 :(得分:2)

您应该只能调用Response.BinaryWrite(result.ToArray())。请注意括号,ToArray是方法调用。

答案 1 :(得分:0)

您不应该将强制转换为Binary.ToArray,而是已经返回一个字节数组。

另一种方法是直接使用字节数组。您可以在设计器中修改它。

更新:

我不完全确定,但可能是您的DataContext已经被处理掉了。我认为二进制类型使用延迟加载。

如果你添加一个堆栈跟踪,我们可以看看是否是这种情况。