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 }
                    );
Другие вопросы по тегам