Проблема получения снимка экрана из базы данных - PullRequest
1 голос
/ 18 октября 2011

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

LINQ to Entities не распознает метод 'System.Drawing.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 - это простой класс, содержащий определение сохраненной информации (ID, язык, снимок экрана, ProjectID).

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

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

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

Спасибо.

Ответы [ 2 ]

1 голос
/ 18 октября 2011

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

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

1 голос
/ 18 октября 2011

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

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

...