【发布时间】:2012-09-06 13:17:41
【问题描述】:
我刚刚发现在 LinqPad 中运行查询时出现了一些奇怪的行为。似乎某些 ASCII 符号/字符被 LinqToSQL 认为是相等的,而实际上它们并非如此。
考虑以下类(带有相应的表):
public class SpecialCharacter
{
int Id;
string Character;
string Name;
}
如果您在表格中为“⇒”(右箭头)和“⇐”(左箭头)添加一行,以下查询将告诉您它们相等(结果将包含两项):
var result = from a in SpecialCharacters
from b in SpecialCharacters
where a.Character == b.Character && a != b
select new {A = a, B = b};
通过添加对 .ToList() 的调用来更改查询将导致预期的行为(结果为空):
var result = from a in SpecialCharacters.ToList()
from b in SpecialCharacters.ToList()
where a.Character == b.Character && a != b
select new {A = a, B = b};
有什么想法吗?
【问题讨论】:
-
理解这些是不是 ASCII字符是很重要的(为了交流的目的)。术语“扩展 ASCII”也没有任何明确定义的含义。它通常表示“某种编码,通常是 8 位,与 ASCII 中定义的字符的 ASCII 字符编码兼容”。
标签: linq-to-sql special-characters extended-ascii