我正在从过滤参数中构建表达式,遇到了一个问题,表达式看起来像这样:
(x =>
(!specParams.CarModelId.HasValue || x.CarModelId == specParams.CarModelId.Value) &&
(string.IsNullOrWhiteSpace(specParams.CarModelName) || x.CarModel.Name.NormalizedContains(specParams.CarModelName))
)
问题出现在我编写的NormalizedContains()
扩展方法中,因为它不能被翻译为表达式,扩展方法:
public static bool NormalizedContains(this string @string, string value) =>
@string.ToLower().Contains(value.ToLower()); // may have other manipulations with strings before comparing
如何将扩展方法重写为表达式?
将Linq表达式转换为Sql语句取决于您没有提到的EF版本。
但是,简短的回答是不要使用静态方法来防止不支持的客户端评估错误或使用AsEnumerable
,如果可能的话,您的数据大小
关于Microsoft Docs的更多信息:客户端与服务器评估