LINQ to Entities не распознает мой метод
Я хочу преобразовать дату и время в персидский язык в LINQ select, но linq не может распознать мой метод:
LINQ to Entities не распознает метод метода System.String toPersianDateTime(System.DateTime), и этот метод нельзя преобразовать в выражение хранилища.
Как я могу изменить свой метод на LINQ-совместимый?
Мой метод:
public static string toPersianDateTime(DateTime dt)
{
PersianCalendar pc = new PersianCalendar();
string pDateTime = pc.GetYear(dt).ToString() + "/" + pc.GetMonth(dt).ToString() + "/" + pc.GetDayOfMonth(dt).ToString() + " ";
pDateTime += pc.GetHour(dt) + ":" + pc.GetMinute(dt) + ":" + pc.GetSecond(dt);
return pDateTime;
}
И мой код LINQ:
var result = (from ord in db.vw_orders
where ord.uid == user.id
orderby ord.order_date descending
select new { ord.id,
date = Tools.toPersianDateTime((DateTime)ord.order_date),
ord.is_final,
ord.status,
ord.image_count,
ord.order_count,
ord.total_price });
1 ответ
Решение
EF не может перевести ваш пользовательский метод в SQL. Вы можете ввести .AsEnumerable()
вызов, чтобы изменить базовый контекст с EF на Linq-to-Objects:
var result = (from ord in db.vw_orders
where ord.uid == user.id
orderby ord.order_date descending select ord
)
.AsEnumerable()
.Select(o => new { o.id,
date = Tools.toPersianDateTime((DateTime)o.order_date),
o.is_final,
o.status,
o.image_count,
o.order_count,
o.total_price }
);