【问题标题】:Linq to Entity comparing strings ignores white spacesLinq to Entity 比较字符串忽略空格
【发布时间】:2014-05-12 16:13:38
【问题描述】:

当使用 LINQ to entity 进行字符串比较时,将忽略空格。

在我的表中,我有一个 nchar(10) 列,因此如果不是 10 个字符,则保存的任何数据都将用空格填充其余数据。下面我将“ncharTextColumn”与"Four" 字符串进行比较。即使 ncharText 等于 "Four " 它也会导致匹配,并且“结果”变量将包含 1 条记录

TestEntities1 entity = new TestEntities1();
var result = entity.Table_1.Where(e => e.ncharText == "Four");

是否有对此的解释和解决方法,或者我是否必须在我的查询中调用 ToList,然后才能进行类似的比较。

var newList = result.ToList().Where(e => e.ncharText == "Four");

此代码现在正确返回 0 条记录,因为它考虑了空格。但是,在比较之前调用 list 可能会导致将大型集合加载到最终不会被使用的内存中。

【问题讨论】:

  • 你不能只做e.ncharText.Trim() == "Four"吗?

标签: c# entity-framework linq-to-entities


【解决方案1】:

This 回答解释了原因。

SQL Server 遵循 ANSI/ISO SQL-92 规范(第 8.2 节、、 一般规则#3) 如何比较字符串和空格。 ANSI 标准要求对中使用的字符串进行填充 比较,以便在比较它们之前它们的长度匹配。这 padding 直接影响 WHERE 和 HAVING 子句的语义 谓词和其他 Transact-SQL 字符串比较。例如, Transact-SQL 认为字符串 'abc' 和 'abc' 是等价的 对于大多数比较操作。

此规则的唯一例外是 LIKE 谓词。当对 LIKE 谓词表达式的一侧具有一个带有尾随的值 空格,SQL Server 不会将两个值填充到相同的长度 在比较发生之前。因为LIKE的目的 根据定义,谓词是为了促进模式搜索而不是 比简单的字符串相等测试,这不违反本节 前面提到的 ANSI SQL-92 规范。

在内部,LINQ 只是对您的数据库进行 SQL 查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    相关资源
    最近更新 更多