我读实体框架的核心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