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

时间:2016-09-26 15:39:30

标签: c# entity-framework

我有一个表达式

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

我的目标应该是这样的

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

但遗憾的是MyClass.Year字段是一个字符串,我需要解析它。当EF将值转换为sql时,我遇到Convert.ToInt32(x.Year)的问题。如何使用EF将int.Parse操作转换为正确的sql语句? 有没有办法做这样的事情?

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)

1 个答案:

答案 0 :(得分:-1)

您可以将变量更改为字符串并使用string.Compare,如下所示:

DateTime date = DateTime.Now;
string dateString = date.ToString();

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

只要您的年份都是4个字符

,这将返回相同的结果