表达式树需要在返回之前处理数据
本文关键字:前处理 数据 返回 表达式 | 更新日期: 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个字符