Система не поддерживается при конвертации 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; }
Другие вопросы по тегам