加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:55:41 所属栏目:百科 来源:网络整理
导读:我正在尝试将名称列表复制到SQL Server表中,我为其设置了Entity Framework项目. 名称列表具有重复值,并且其中几个在其末尾具有空格.我希望只插入表中尚未存在的名称,以及从它们的末尾修剪空格.看起来相当简单吧? 我的解决方案是: if (!context.Names.Any(n
我正在尝试将名称列表复制到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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读