EF核心表达式树CONVERT



我在编写EF Core表达式树代码时遇到了麻烦,该代码能够利用其内置CONVERT函数(CONVERT( type[(length)], expression [, style]))的所有3个参数转换为MS SQL Server查询,以便在转换即日期时间到字符串时应用样式。

我已经设法编写查询转换为SQL中的CONVERT,但只传递2个参数:typeexpression:

Expression.Convert(
Expression.Call(
typeof(Convert),
nameof(Convert.ToString),
Type.EmptyTypes,
Expression.PropertyOrField(parameter, prop.Name)
),
typeof(string)
);

然而,如果我尝试使用IFormatProviderConvert.ToString()方法(即,在Expression.PropertyOrField(parameter, prop.Name)之后传递以下参数:Expression.Constant(format, typeof(IFormatProvider))),我得到异常,表示表达式无法转换为SQL查询。

为了测试的目的,format变量定义为:var format = new CultureInfo("hr-HR");.

任何帮助都将非常感激。我使用的是EF Core 7.0和SQL Server。

在EFCore 7中,为CONVERT内置函数提供style参数是不可能的。

您可以在这里查看哪些内置函数被翻译以及如何翻译。

你也可以看到这篇关于使用IMethodCallTranslator自己构建扩展的文章,尽管它是一个旧的(2019)。实际的EFCore CONVERT IMethodCallTranslator可以在这里找到。

仅供参考你可以(也许应该)使用DateTime的ToString方法而不是CONVERT。它将在查询的最终选择(顶层投影)中工作得很好。

最新更新