我的 .NET 代碼中有這個擴展方法,檢查字串是否為:
public static bool IsSomething(this string text)
{
var isNothing = string.IsNullOrEmpty(text) || string.IsNullOrWhiteSpace(text);
return !isNothing;
}
但是,我不能在我的 EF Core 查詢中使用它:
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 翻譯?
uj5u.com熱心網友回復:
只需使用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 將對其進行翻譯。
uj5u.com熱心網友回復:
您不能將此方法轉換為 SQL Server。但是,您可以使用回傳 Expression 的方法。例如:
public static Expression<Func<Student, bool>> IsSomething()
{
return (s) => string.IsNullOrEmpty(s.FirstName) || string.IsNullOrWhiteSpace(s.FirstName);
}
通常,您應該在使用方法之前呼叫 AsEnumerable:
dbset.AsEnumerable().Where(i => i.Title.IsSomething());
但它會從資料庫加載所有物體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/318215.html
標籤:C# 。网 sql-server 林克 实体框架核心
