C# 插值字符串上的Ef Core与Linq
使用插值字符串发送sql server查询,为什么在LINQ to sql上使用datacontext时需要添加单引号C# 插值字符串上的Ef Core与Linq,c#,sql-server,linq-to-sql,ef-core-2.2,C#,Sql Server,Linq To Sql,Ef Core 2.2,使用插值字符串发送sql server查询,为什么在LINQ to sql上使用datacontext时需要添加单引号 db.ExecuteCommand($“删除表,其中日期=”{date:yyyy-MM-dd}') 使用EF Core时,您需要删除它们吗 db.Database.ExecuteSqlCommand($"delete table where date = {date:yyyy-MM-dd}"); 为什么在EF Core中,如果使用String.Format而不是插值,则需要
db.ExecuteCommand($“删除表,其中日期=”{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}”
不是字符串。这是一个好主意。实体框架将利用它来解析其中的参数
另一方面,String.Format
将创建一个新的格式化字符串,其中不包含已格式化(或应格式化)的元信息。实体框架没有好的方法将其解析为数据库参数。它必须按原样将其发送到数据库
总之:如果你传递一个字符串,它必须有适当的格式,这样数据库才能理解文本。如果您向实体框架传递它能够理解并能够解析元数据的内容,它会将其转换为数据库参数,您不需要正确的格式,因为它不会以纯文本的形式发送,而是以带有数据库参数的文本的形式发送
为什么linqtosql不使用FormattableString
的强大功能?可能是因为它在这个功能出现之前就被弃用了 好的,谢谢。阅读本文以获得更详细的解释很有帮助: