【问题标题】:LINQ to Entities does not recognize my methodLINQ to Entities 无法识别我的方法
【发布时间】:2016-06-06 16:09:51
【问题描述】:

我想在 LINQ 选择中将日期和时间转换为波斯语,但 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 });

【问题讨论】:

  • 我也会考虑简化toPersianDateTime。似乎可以用对 DateTime.ToString() 的一次调用来替换它。

标签: c# linq-to-entities linq-method-syntax


【解决方案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 }
                    );

【讨论】:

  • 谢谢斯坦利,这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 2012-04-03
  • 2021-11-06
  • 2012-05-03
相关资源
最近更新 更多