При преобразовании номера месяца в строку ошибка: не распознает метод «System.String ToString (Int32)» - PullRequest
0 голосов
/ 11 апреля 2019

пытается выбрать отдельные месяцы в числовой форме из базы данных, где есть запись этого месяца в базе данных.

        public IEnumerable<months> dropdownMonths(datafilter dataparams)
    {
        try
        {
            var _dbEntity = new VXI_GLOBALiTRACKEntities();
            var unique_months =
                _dbEntity
                    .TBL_REQUEST
                    .Select(s => new months
                    {
                        value = s.REQUEST_DATE_SUBMITTED.Value.Month,
                        yr = s.REQUEST_DATE_SUBMITTED.Value.Year,
                        month = Convert.ToString(s.REQUEST_DATE_SUBMITTED.Value.Month)

                    })
                    .Distinct()
                    .Where(s => s.yr == dataparams.year)
                    .ToList();

            return unique_months;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

сейчас на month = Convert.ToString(s.REQUEST_DATE_SUBMITTED.Value.Month)

получает ошибку

LINQ to Entities does not recognize the method 'System.String ToString(Int32)' method, and this method cannot be translated into a store expression.

как я могу это исправить или как я могу преобразовать число этого месяца в строку месяца, например {value: 1, month: JAN}

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Проверьте версию вашей СУБД и версию EF, поддерживают ли они DATEPART метод

Например,

sqlserver 2017, есть таблица, подобная приведенной ниже

CREATE TABLE [Table1](
    [col_datetime] [datetime] NULL
);

insert into [Table1] 
select '2019/01/02 03:04:05'

, а затем запрос ef

Table1s.Select(w => new { month = Convert.ToString(w.Col_datetime.Value.Month)})

он запросит ниже sql

SELECT CONVERT(NVarChar,DATEPART(Month, [t0].[col_datetime])) AS [month]
FROM [Table1] AS [t0]

, если он не поддерживается, то он получит ошибку LINQ to Entities does not recognize the method 'System.String ToString(Int32)' method, and this method cannot be translated into a store expression.

, если вам придется сделать это безфункция поддержки, вы можете ToList () сначала сохранить данные в память, а затем выбрать

Table1s.Where(w=>/*your filter logic*/).ToList().Select(w => new { month = Convert.ToString(w.Col_datetime.Value.Month)})
0 голосов
/ 11 апреля 2019

Если REQUEST_DATE_SUBMITTED имеет тип DateTime в вашей сущности, то

month = s.REQUEST_DATE_SUBMITTED.ToString().Substring(0, 3).ToUpper()

month = "JAN"

Если вы не получаете результат, посмотрите, равен ли ваш столбец в таблице

datetime или smalldate

, если это не так, измените его на datetime

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...