Система не поддерживается при конвертации DateTime - DotNetHighChart
Я очень новичок в C# и MVC, и я создаю веб-приложение. Я пытаюсь создать линейный график, используя DotNet High Chart, который будет заполняться данными из моей базы данных. У меня проблема с преобразованием DateTime в строку. Контроллер моего графика:
var dataLeft = (from d in db.Appointments
select new
{
Date = d.Date.ToString("yyyyMMdd"),
IOPLeft = d.IOPLeft,
}).ToList();
var xSeries = dataLeft.Select(a => a.Date).ToArray();
var ySeries = dataLeft.Select(a => a.IOPLeft).ToArray();
// instantiate an object of the high charts type
var chart = new Highcharts("chart")
// define the type of chart
.InitChart(new Chart { DefaultSeriesType = ChartTypes.Line })
//overall title of the chart
.SetTitle(new Title { Text = "Left IOP" })
//small label below the main title
.SetSubtitle(new Subtitle { Text = "LeftIOP" })
// load the x values
.SetXAxis(new XAxis { Categories = xSeries })
// set the y title
.SetYAxis(new YAxis { Title = new YAxisTitle { Text = "IOP" } })
.SetTooltip(new Tooltip
{
Enabled = true,
Formatter = @"function() { return '<b>'+this.series.name +'</b><br/>'+this.x+': '+this.y;}"
})
.SetPlotOptions(new PlotOptions
{
Line = new PlotOptionsLine
{
DataLabels = new PlotOptionsLineDataLabels
{
Enabled = true
},
EnableMouseTracking = false
}
})
//load y values
.SetSeries(new[]
{
new Series {Name = "Patient",
Data = new Data(new object[] {ySeries})},
});
return View(chart);
}
}
}
Моя модель:
[Display(Name = "Date")]
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime Date { get; set; }
[Display(Name = "Left IOP")]
public int IOPLeft { get; set; }
Когда я пытаюсь запустить приложение, я получаю следующую ошибку:
Исключение типа "System.NotSupportedException" произошло в EntityFramework.SqlServer.dll, но не было обработано в коде пользователя
Дополнительная информация: LINQ to Entities не распознает метод метода System.String ToString(System.String), и этот метод нельзя преобразовать в выражение хранилища.
Любой гепатит будет принята с благодарностью
2 ответа
Вы получаете ошибку из-за.ToString("yyyyMMdd") в коде ниже. По сути, SqlServer не знает, как интерпретировать функциональность C# .ToString(), и вызывает исключение.
var dataLeft = (from d in db.Appointments
select new
{
Date = d.Date.ToString("yyyyMMdd"),
IOPLeft = d.IOPLeft,
}).ToList();
Вы должны извлечь данные из базы данных в "правильном" формате, а затем манипулировать ими в соответствии с желаемым форматом.
Так что-то вроде этого было бы лучше:
var dataLeft = (from d in db.Appointments
select new
{
Date = d.Date,
IOPLeft = d.IOPLeft,
}).ToList();
var xSeries = dataLeft.Select(a => a.Date.ToString("yyyyMMdd")).ToArray();
Сделайте dateTime обнуляемым, чтобы он не вызывал исключение при выборке данных.
public DateTime? Date { get; set; }