Проблема с извлечением скриншота из базы данных

#asp.net-mvc-3 #c#-4.0 #orm

#asp.net-mvc-3 #c # -4.0 #orm

Вопрос:

У меня есть куча скриншотов и некоторые метаданные скриншотов, которые я пытаюсь отобразить в ASP.NET Веб-приложение MVC 3, я пытаюсь извлечь данные из своей базы данных, но я получаю эту ошибку:

LINQ to Entities не распознает метод ‘System.Рисование.Метод Image ByteArrayToImage (Byte[])’, и этот метод не может быть преобразован в выражение хранилища.

Вот мой код:

     var screenshotData = (from screenshots in db.screenshots
                              where screenshots.projects_ID == projectID
                              select new ImageInformation
                              {
                                  ID = screenshots.id,
                                  Language = screenshots.language,
                                  Screenshot = Utility.ByteArrayToImage(screenshots.screen_shot),
                                  ProjectID = screenshots.projects_ID
                              });

    foreach (ImageInformation info in screenshotData)
    {
        this.Add(info);
    }
  

ImageInformation — это просто простой класс, который содержит определение сохраненной информации (идентификатор, язык, скриншот, идентификатор проекта).

Вот моя функция ByteArrayToImage:

 public static Image ByteArrayToImage(byte[] byteArrayIn)
{
    using (MemoryStream ms = new MemoryStream(byteArrayIn))
    {
        Image returnImage = Image.FromStream(ms);
        return returnImage;
    }
} 
  

Кто-нибудь может сказать мне, почему я получаю эту ошибку при запуске этого кода?

Спасибо.

Ответ №1:

Я думаю, это потому, что с помощью LINQ-to-Entities код превращается в запрос на стороне сервера, и в этом случае он не может этого сделать. Я не думаю, что вы можете смешивать клиентский код, подобный этому, напрямую с L2E.

Я подозреваю, что вам придется выполнить преобразование из byte-> image после того, как вы извлекли данные из базы данных в качестве отдельного шага.

Комментарии:

1. Странно, я думаю, это работает с LINQ to SQL.. Я все равно добавлю обходной путь, спасибо!

Ответ №2:

Вы не можете выполнить эту функцию в запросе LINQ to Entities… один из вариантов:

1) создайте свойство byte[] для объекта, который вы создаете (ImageInformation), и скопируйте туда данные вместе с другим свойством для чтения изображения из этого объекта ImageInformation.