我讀實體框架的核心2.0 https://blogs.msdn.microsoft.com/dotnet/2017/08/14/announcing-entity-framework-core-2-0/實體框架EF.Functions.Like VS string.Contains
宣佈它說,他們增加了新的SQL功能,如EF.Functions.Like
用於執行SQL LIKE
操作。
我在想,那麼EF.Functions.Like
和string.Contains
/StartsWith
之間的區別是什麼呢?
例如:
var customers = context.Customers.Where(c => c.Name.StartsWith("a")); // Version A
var customers = context.Customers.Where(c => EF.Functions.Like(c.Name, "a%")); // Version B
什麼是兩個版本之間的區別? EF已經知道如何將string.Contains
/StartsWith
轉換爲相應的SQL操作,不是嗎?
我能想到的唯一理由是,EF.Functions.Like將允許更復雜的模式,比如"a%b%"
(雖然這其中可寫爲StartsWith("a") && Contains("b")
)
這是什麼原因?
檢查SQL語句。最有可能的是,它們是相同的。 '.StartsWith'被轉換爲'LIKE'a%''。 *包含*另一方面將被轉換爲'LIKE'%a%'',這是一個非常糟糕的主意。 'LIKE'%''可以利用索引,因爲它本質上是一個範圍搜索。 'LIKE'%a%''雖然必須處理所有行以查找模式是否匹配 –
是的,多數民衆贊成在 –
是的,這是我懷疑,它會更好,如果他們提供了一個擴展方法它,c.Name.Like(...) – areller