我正在尝试将名称列表复制到 SQL Server 表中,我为其设置了实体框架项目。
名称列表有重复的值,并且有几个值末尾有空格。我希望只插入表中尚未存在的名称,并删除它们末尾的空格。看起来相当简单,对吧?
我的解决方案是这样的:
if (!context.Names.Any(n => n.Value == nameToCopy.Trim())
context.Names.Add(nameToCopy.Trim())
注意。这不是我的确切代码,只是一个示例,因此无需提及我正在修剪两次!
令我惊讶的是,上面的内容并没有按照我的预期工作。我在分析上述陈述时发现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)
谁能解释为什么第一个解决方案不在数据库查询中使用字符串的修剪版本?
Thanks
总体结果应该是相同的。你的个人资料怎么样?
!context.Names.Any(n => n.Value == nameToCopy.Trim())
上面是 Linq to Entities.Trim()
转换为 SQLRTRIM(LTRIM())
字符串 var 以其原始状态发送到 SQL Server,并作为查询的一部分进行修剪。
string trimmedName = nameToCopy.Trim()
if (!context.Names.Any(n => n.Value == trimmedName)
鉴于以上,.Trim()
是正常的System.String.Trim()
并且字符串 var 在发送到 SQL Server 之前被修剪。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)