3

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 });
4

1 に答える 1

10

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 }
                    );
于 2016-06-06T16:14:05.240 に答える