are*_*ler 39 c# entity-framework
我正在阅读实体框架核心2.0的公告https://blogs.msdn.microsoft.com/dotnet/2017/08/14/announcing-entity-framework-core-2-0/
它说它们添加了新的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
Run Code Online (Sandbox Code Playgroud)
两个版本之间有什么区别?EF已经知道如何翻译string.Contains/ StartsWith到相应的SQL操作,不是吗?
我能想到的唯一原因是EF.Functions.Like会允许更复杂的模式"a%b%"(尽管这个可以写成StartsWith("a") && Contains("b"))
这是什么原因?
Tse*_*eng 40
@adiga的答案非常不完整,仅涵盖了使用差异的一部分.
然而.StartsWith(...),.Contains(...)并且.EndsWith(...)被翻译成不同的SQL然后EF.Functions.Like.
例如,翻译成.StartsWith翻译的(string LIKE pattern + "%" AND CHARINDEX(pattern, string) = 1) OR pattern = ''位置..Contains(CHARINDEX(pattern, string) > 0) OR pattern = ''
EF.Functions.Like然而被翻译成string LIKE pattern [ESCAPE escapeChar].
这也可能对性能产生影响.以上内容适用于EF Core SqlServer提供程序.其他EF Core提供商可能会以不同方式对其进
adi*_*iga 35
像查询一样支持通配符,因此在某些情况下与字符串扩展方法相比非常有用.
例如:如果我们用'ri'搜索所有4个字母名称作为我们可以做的中间字符 EF.Functions.Like(c.Name, "_ri_");
或者从以元音开头的城市中获取所有客户:
var customers = from c in context.Customers
where EF.Functions.Like(c.City, "[aeiou]%");
select c;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25340 次 |
| 最近记录: |