#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.