【发布时间】:2021-11-09 08:42:43
【问题描述】:
我正在尝试将属性转换为对象,然后转换为字符串(请不要问为什么。:D),然后调用方法,但原因很简单。
我们看一下代码:
var containsMethod = typeof(string).GetMethod("Contains", new[] { typeof(string) });
Expression<Func<EmployeeDto, object>> parameter = s => s.BirthDate;
var convert = Expression.Convert(Expression.Convert(parameter.Body, typeof(object)), typeof(string));
var condition = Expression.Call(
convert,
containsMethod!,
Expression.Constant("bla bla", typeof(string))
);
我省略了一些不必要的代码。基本上,我试图将任何类型的属性转换为字符串,然后调用 Contains 方法。但是该表达式会生成以下表达式:
(string)(object) s.BirthDate.Contains("bla bla")
这绝对是不正确的语法。我想把 s.BirthDate 放在括号中。像这样:
((string)(object)s.BirthDate).Contains("bla bla")
【问题讨论】:
-
BirthDate的类型是什么?另外,为什么你认为你必须这样做? -
那是日期时间。我正在尝试将任何属性转换为字符串,这在 EF 核心中是不可能的。所以我找到了解决方法。基本上,您可以将某些内容转换为对象,然后转换为可以正常工作的字符串。
-
你能添加其余的代码来看看你是如何使用它的吗?它使调试和更新更容易
-
你怎么知道它会产生“语法错误”的表达式?
-
您可以将
DateTime转换为对象没问题,但您不能只是神奇地将其转换为字符串。 dotnetfiddle.net/nJ8yle - 你可以在对象上调用ToString(),但那是完全不同的事情(并且不需要转换为object)