c# – 实体框架查询中string.Trim()的行为

c# – 实体框架查询中string.Trim()的行为,第1张

概述我正在尝试将名称列表复制到SQL Server表中,我为其设置了Entity Framework项目. 名称列表具有重复值,并且其中几个在其末尾具有空格.我希望只插入表中尚未存在的名称,以及从它们的末尾修剪空格.看起来相当简单吧? 我的解决方案是: if (!context.Names.Any(n => n.Value == nameToCopy.Trim()) context.Names.A 我正在尝试将名称列表复制到sql Server表中,我为其设置了Entity Framework项目.

名称列表具有重复值,并且其中几个在其末尾具有空格.我希望只插入表中尚未存在的名称,以及从它们的末尾修剪空格.看起来相当简单吧?

我的解决方案是:

if (!context.names.Any(n => n.Value == nameTocopy.Trim())  context.names.Add(nameTocopy.Trim())

NB.这不是我的确切代码,只是一个例子,所以不需要提到我正在修剪两次!

令我惊讶的是,上述方法并不像我预期的那样有效.我在发现上述语句时发现,if(!context.names.Any(n => n.Value == nameTocopy.Trim())实际上并没有查询nameTocopy的修剪版本 – 几个被查询名称末尾有空格.

但是,如果我执行以下 *** 作,则按预期工作:

string trimmedname = nameTocopy.Trim()if (!context.names.Any(n => n.Value == trimmedname)      context.names.Add(trimmedname)

任何人都可以解释为什么第一个解决方案不在数据库查询中使用剪裁版本的字符串?

谢谢

解决方法 总体结果应该是相同的.你是如何剖析的?

!context.names.Any(n => n.Value == nameTocopy.Trim())

上面,linq to EntitIEs .Trim()转换为Tsql RTRIM(LTRIM()),字符串var以其原始状态发送到sql Server,并作为查询的一部分进行修剪.

string trimmedname = nameTocopy.Trim()if (!context.names.Any(n => n.Value == trimmedname)

上面,.Trim()是一个普通的System.String.Trim(),并且在发送到sql Server之前修剪字符串var.

总结

以上是内存溢出为你收集整理的c# – 实体框架查询中string.Trim()的行为全部内容,希望文章能够帮你解决c# – 实体框架查询中string.Trim()的行为所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1218274.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存