表达式树需要在返回之前处理数据

本文关键字:前处理 数据 返回 表达式 | 更新日期: 2023-09-27 18:08:58

我有一个表达式

DateTime date = DateTime.Now;
Expression<Func<MyClass, bool>> exp = null;

我的目标应该是这样的

exp = x => x.Year > date.Year

但不幸的是MyClass。年份字段是字符串,我需要解析它。在EF将值转换为sql时,我遇到了Convert.ToInt32(x.Year)的问题。我怎么把它翻译成。解析操作到一个正确的sql语句与EF?有办法做到这一点吗?

exp = x => 
{
  int val = int.Parse(x.Year);
  return val > date.Year
}

有一个工作只是为了正确编译它,但仍在寻找另一种方式,EF不能将这些调用转换为sql:

private bool GetExpression(MyClass myClass, DateTime endDate)
{
    int year = 0;
    var res = int.TryParse(myClass.Year, out year);
    if (res)
        return year > endDate.Year;
    return false;
}
exp = x => GetExpression(x, DateTime.Now)

表达式树需要在返回之前处理数据

您可以将变量更改为string并像这样使用string.Compare:

DateTime date = DateTime.Now;
string dateString = date.ToString();
Expression<Func<MyClass, bool>> exp = 
   x => string.Compare(x.Year, dateString) > 0;

这将返回相同的结果,只要你的年份都是4个字符