500 Ошибка при преобразовании обнуляемого DateTime в строку в IQueryable - PullRequest
0 голосов
/ 19 октября 2018

У меня есть следующий код, где я получаю данные из контекста БД и преобразую обнуляемый DateTime DateOfUpdate в строку:

var result = from data in context.releventData
select new ReleventData
{
    Id = data.Id,
    Status = data.Status,
    DateOfUpdate = data.DateOfUpdate.HasValue ? data.DateOfUpdate.Value.ToString("dd-MM-yyyy") : string.Empty,
};

Когда выполняется ToList() на result, я застреваюи браузер выдает мне 500 Internal Server Error под водой.

Когда я использую это: DateOfUpdate = string.Empty, он работает совершенно нормально, поэтому я, вероятно, делаю что-то не так, чтобы преобразовать DateTime в строку.

Есть идеи, как это исправить?

1 Ответ

0 голосов
/ 19 октября 2018

Во-первых.Насколько я вижу, это не относится к запросу Linq aansluiting.Что это ?Во-вторых, почему бы вам не попытаться материализовать данные, сначала вызвав .ToList(), так что если что-то плохое случится, вы сразу увидите, а не просто ошибку 500.

Я думаю, что вызов .ToString("dd-MM-yyyy") внутри Linq не являетсямудрый шаг, так как Linq не доволен этой функцией.Попробуйте сначала извлечь данные, а затем преобразовать их в ваш формат.В вашем случае вы получите эту ошибку:

Исключение типа 'System.NotSupportedException' произошло в EntityFramework.SqlServer.dll, но не было обработано в коде пользователя

Дополнительная информация: LINQ to Entities не распознает метод метода System.String ToString (System.String), и этот метод нельзя преобразовать в выражение хранилища.

Вы можете сделать что-то вроде этого:

 var result = context.releventData.ToList().Select(data => new ReleventData
 {
     Id = data.Id,
     Status = data.Status,
     DateOfUpdate = data.DateOfUpdate.HasValue ? data.DateOfUpdate.Value.ToString("dd-MM-yyyy") : string.Empty,
 }).ToList();

НО это не лучшее решение, так как вы в конечном итоге материализуете все свои данные, что означает, что все данные таблицы будут обрабатываться в вашем приложении, что является избыточным, если таблица не мала.

Итак, лучшее решение для этого:

Получите необходимые данные из запроса Linq ( Только то, что вам нужно ).Затем материализуйте эти данные и отформатируйте их так, как вы хотите, а затем покажите их пользователю.

Мое собственное мнение: Запрос Linq не должен отвечать за генерацию формата данных.Это следует сделать на верхнем уровне приложения или, по крайней мере, после того, как вы материализовали свои данные.

...