#c# #entity-framework
#c# #entity-framework
Вопрос:
попытка выбрать отдельные месяцы в числовой форме из базы данных, где есть запись этого месяца в базе данных.
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}
Ответ №1:
Проверьте версию вашей СУБД и версию 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.
если вам необходимо сделать это без функции поддержки, вы можете сначала сохранить данные в памяти, а затем выбрать
Table1s.Where(w=>/*your filter logic*/).ToList().Select(w => new { month = Convert.ToString(w.Col_datetime.Value.Month)})
Комментарии:
1. является ли ToList затем Выберите также получить ошибку? какая у вас версия СУБД и ef?
Ответ №2:
Если REQUEST_DATE_SUBMITTED имеет тип DateTime в вашей сущности, то
month = s.REQUEST_DATE_SUBMITTED.ToString().Substring(0, 3).ToUpper()
месяц = «ЯНВАРЬ»
Если вы не получаете результат, посмотрите, соответствует ли ваш столбец в таблице
datetime или smalldate
если это не так, измените его на datetime
Комментарии:
1.
s.REQUEST_DATE_SUBMITTED
равно 1. теперь мне нужно преобразовать его в JAN