C# 获取Translate方法内的SqlParameterExpression值

C# 获取Translate方法内的SqlParameterExpression值,c#,entity-framework-core,ef-core-5.0,C#,Entity Framework Core,Ef Core 5.0,我正在尝试在EF Core 5中实现一个定制的IMethodCallTranslator 翻译: 公共类NpgsqlCustomILikeMethodTranslator:IMethodCallTranslator { 私有只读方法信息_customILikeMethod=typeof(NPGSQLDBFunctionsExtrains) .GetRuntimeMethod(名称为(NpgsqlDbFunctionsExtensions.CustomILike), 新的[]{typeof(DbF

我正在尝试在EF Core 5中实现一个定制的IMethodCallTranslator

翻译:

公共类NpgsqlCustomILikeMethodTranslator:IMethodCallTranslator
{
私有只读方法信息_customILikeMethod=typeof(NPGSQLDBFunctionsExtrains)
.GetRuntimeMethod(名称为(NpgsqlDbFunctionsExtensions.CustomILike),
新的[]{typeof(DbFunctions)、typeof(string)、typeof(string)};
公共SqlExpression Translate(SqlExpression实例,
MethodInfo方法,
IReadOnlyList参数,
IDiagnosticsLogger(日志记录器)
{
如果(方法==\u自定义方法)
{
变量模式=参数[2];
if(模式为SqlParameterExpression模式参数)
{
//以字符串形式从patternParameter获取值
变量模式字符串=???;
//用字符串做些什么
patternString=定位销(patternString);
//将更改后的字符串作为常量
pattern=new-SqlConstantExpression(Expression.Constant(patternString),null);
}
返回新的PostgresILikeExpression(参数[1],模式,null,null);
}
返回null;
}
}
用法:

var模式=“%A%”;
query=query.Where(u=>EF.Functions.CustomILike(u.Name,pattern);

有没有办法从Translate方法中获取我的模式字符串值“%A%”?

IMethodCallTranslator
实现中无法获取
SqlParameterExpression
的值。因此,请尝试强制EF Core为此类方法生成
SqlConstantExpression
。可以通过添加
[NotParameterized]
所需功能参数的属性

publicstaticboolscustomilike(字符串str,[NotParameterized]字符串模式)

不确定它是否有效,但尝试将
[未参数化]
应用于模式参数。在这种情况下,它应该创建
SqlConstantExpression
@SvyatoslavDanyliv Yeap!它有效。你救了我一天!Thx)@SvyatoslavDanyliv Mb你知道,如果我想翻译现有的方法,如
string.Contains(string)
?我不能给它加上[非参数化]属性。我建议对表达式树进行预处理,并用具有此属性的方法替换
Contains
。在这个阶段处理参数值并不是那么容易。@SvyatoslavDanyliv Mb你把你的第一条评论写下来作为答案,我会标记它吗?