c# - 如何编写此扩展方法以由 EF Core 转换为 SQL Server?
问题描述
我在我的 .NET 代码中有这个扩展方法检查字符串是否是:
public static bool IsSomething(this string text)
{
var isNothing = string.IsNullOrEmpty(text) || string.IsNullOrWhiteSpace(text);
return !isNothing;
}
但是,我不能在我的 EF Core quereis 中使用它:
dbset.Where(i => i.Title.IsSomething()); // throws non-translatable error
我知道我可以将查询重写为:
dbset.Where(i => i.Title != null && i.Title.Trim() != ""); // this works, but it's too verbose
但我真的不想写那么长的非描述性代码。
我如何才能IsSomething
为 SQL Server 翻译?
解决方案
只需使用IsNullOrWhiteSpace
; 它做了什么IsNullOrEmpty
:
true
如果 value 参数为 null 或 Empty,或者 value 仅由空白字符组成,则 返回。-- IsNullOrWhiteSpace 的文档
它由 EF Core 映射到 SQL
@value IS NULL OR LTRIM(RTRIM(@value)) = N''
请注意,在 EF Core 6 中,这更改为@value IS NULL OR value= N''
- 相同的交易;SQLS 忽略字符串 comp 中的尾随空格
这意味着您的IsSomething
方法是有效!IsNullOrWhiteSpace
的,如果您使用它,EF 将翻译它。
推荐阅读
- python - Python:在不使用 Pandas 的情况下将目录中的多个 csv 文件读入字典
- python - 为 Yahoo API 生成签名时遇到问题
- postgresql - 如果相应表上存在键,则 posgresql 从联接返回聚合
- css - 在我的 formArray 中使用 p-dropdown 时,值会根据框的大小消失
- jquery - 悬停闪烁时弹出链接(jQuery)
- python - Python:argparse.ArgumentParser() - 覆盖全局默认值
- runtime - 如何在 install4j 运行时设置 VM 参数
- excel-formula - 为什么我的 SUMIF 函数不适用于格式化表格?
- excel - 为什么这个 VBScript 在 Excel VBA 中运行良好,但作为独立的 vbscript?
- javascript - 在 Vuejs 问题中使用按钮输入文件