我刚刚发现在 LinqPad 中运行查询时出现了一些奇怪的行为。LinqToSQL 似乎认为某些 ASCII 符号/字符是相等的,而实际上它们并非如此。
考虑以下类(带有相应的表):
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};
任何想法这是怎么回事?