我使用的是EF Code First,我有一个Linq To SQL(针对Oracle数据库)。为了简单起见,我将恢复这个场景。假设我有这样的表产品:
ProductName (varchar)
A
1
C
2
B
3
4
好吧,所以我使用EF构建查询:
var query = Repo.Products.AsQueryable().OrderBy(p => p.ProductName);
当我调试时,我得到生成的T-SQL并在oracle中执行,everthing没问题,结果集是:
1
2
3
4
A
B
C
这是正确的(记住字段是varchar / string)给定字符的优先顺序。
好的,现在如果我执行以下操作:
var list = query.ToList();
结果是:
A
B
C
1
2
3
4
这是错误的,与Oracle结果集不同。如果我在OrderBy()之前调用ToList(),结果会正确排序,但我不想之前调用ToList()以避免在过滤之前获取所有记录。
我真的为此疯狂了。有人可以帮忙吗?
答案 0 :(得分:0)
我明白了!
问题是Oracle中的NLS_SORT变量。奇怪的是,PL / SQL管理器开发人员显示“正确”的顺序,首先是数字,但不同行为的原因是因为它改变了NLS_SORT变量会话,而实体框架没有。
我只是在执行任何查询之前将NLS_SORT设置为'BINARY',就是这样!
解决!
感谢。