Ошибка: System.Data.Linq.Binary 'не может быть преобразован в «одномерный массив байтов» - PullRequest
1 голос
/ 01 апреля 2009

Я пытаюсь вернуть двоичный файл из БД, используя 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 ]

2 голосов
/ 01 апреля 2009

Вы должны иметь возможность просто вызвать Response.BinaryWrite (result.ToArray ()). Обратите внимание на паратезы, ToArray - это вызов метода.

0 голосов
/ 01 апреля 2009

Вам не нужно приводить как Binary.ToArray, он уже возвращает байтовый массив.

Альтернативой является непосредственное использование байтового массива. Вы можете изменить его в конструкторе.

UPDATE:

Я не совсем уверен, но, возможно, ваш DataContext уже удален. Я думаю, что двоичный тип использует отложенную загрузку.

Если вы добавите трассировку стека, мы увидим, так ли это.

...