c# - 内插字符串上的 Ef Core 与 Linq

标签 c# sql-server linq-to-sql ef-core-2.2

使用内插字符串发送 sql server 查询,为什么在 LINQ to SQL 上使用数据上下文需要添加单引号?

db.ExecuteCommand($"delete table where date = '{date:yyyy-MM-dd}'");

在使用 EF Core 时,您需要删除它们吗?

db.Database.ExecuteSqlCommand($"delete table where date = {date:yyyy-MM-dd}"); 

以及为什么在 EF Core 中,如果您使用 String.Format 而不是插值,则需要放回单引号:

String.Format("delete table where date='{0}'", date.ToString("yyyy-MM-dd"));

最佳答案

主要区别在于:$"hello {variable}" 不是字符串。这是一个FormattableString . Entity Framework 将利用它并使用它来解析其中的参数。

另一方面,

String.Format 将创建一个新的格式化字符串,而没有元信息什么是(或应该)格式化的。 Entity Framework 没有很好的方法将其解析为数据库参数。它必须按原样将其发送到数据库。

总结一下:如果你传递一个字符串,它必须有正确的格式,这样数据库才能理解文本。如果您传递 Entity Framework 它理解的东西并且可以从中解析元数据,它会将其转换为数据库参数并且您不需要正确的格式,因为它不会作为纯文本发送,而是作为带有数据库参数的文本发送。

为什么 Linq-to-Sql 不使用 FormattableString 的强大功能?可能是因为在这个特性存在之前它就被弃用了。

关于c# - 内插字符串上的 Ef Core 与 Linq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56648000/

相关文章:

.net - 通过新的 async/await 异步使用 Linq to Sql

c# - 如何从查询导入组合框中剪切字符串

c# - 如何正确处理System.Net.Mail.SmtpException?

c# - Marshal.PtrToStructure 访问冲突

c# - 将 ILMerge 与 IronPython 结合使用

c# - 如何加快在 SQL 数据库表中插入文本文件的速度?

sql-server - 这个SQL : `SELECT CONVERT(CHAR(10), GETDATE(),103)` 发生了什么

sql-server - 为什么十进制的精度范围宽度不同?

c# - IQueryable 在使用后被释放

c# - 从服务器资源管理器拖放到数据集和 DBML 设计器不工作