IQueryable.ToList 方法搞乱了 T-SQL 排序顺序

IQueryable.ToList method messing up with T-SQL sorting order

我正在使用 EF Code First,并且我有一个 Entity Framework(针对 Oracle 数据库)。为了简单起见,我将恢复场景。假设我有 table 个这样的产品:

ProductName (varchar)
A
1
C  
2
B
3
4

嗯,所以我使用 EF 构建了一个查询:

var query = Repo.Products.AsQueryable().OrderBy(p => p.ProductName);

我调试的时候,得到生成的SQL,在oracle中执行,一切正常,结果集是:

1
2
3
4
A
B
C

鉴于字符的优先顺序,这是正确的(记住字段是 varchar/string)。

好的,现在如果我执行以下操作:

var list = query.ToList();

结果是:

A
B
C
1
2
3
4

这是错误的,与Oracle结果集不同。如果我在 OrderBy() 之前调用 ToList(),结果排序正确,但我不想在之前调用 ToList() 以避免在过滤之前获取所有记录。

我真的快被这个搞疯了。有人可以帮忙吗?

我明白了!

问题是 Oracle 中的 NLS_SORT 变量。奇怪的是 PL/SQL Manager Developer 显示 "right" 顺序,数字在前,但不同行为的原因是因为它更改了 NLS_SORT 变量会话,并且 Entity Framework 没有。

我只是在执行任何查询之前将 NLS_SORT 设置为 'BINARY',仅此而已!

已解决!

谢谢。