【发布时间】:2013-06-29 03:35:45
【问题描述】:
我正在尝试将名称列表复制到 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)
谁能解释为什么第一个解决方案不在数据库查询中使用修剪后的字符串版本?
谢谢
【问题讨论】:
-
我不确定您的真实代码是什么,但这两个代码似乎相同。 L2E 的一件事您应该知道,在某些数据库配置中,是否修剪数据或使用大写字母都无关紧要......例如
name = "Adam"或name = "ADAM "可以有相同的输出。
标签: c# sql-server string entity-framework trim