EF4 Linq Oracle 11g使查询不区分大小写

时间:2011-01-21 19:55:35

标签: linq entity-framework-4 oracle11g

我们正在转向EF4& Linq作为Oracle 11g数据库的db接口。数据库设置为区分大小写,但我们需要搜索不区分大小写。在oracle中使用“UPPER”查询可能非常昂贵。我已经用指示的结果查看了以下选项:

ChangeEntities.TABLE.Where(x => x.FIELD.Equals(VARIABLE))

generates SQL Where clause:

WHERE TABLE.FIELD = VARIABLE
---------------------
ChangeEntities.TABLE.Where(x => x.FIELD.Equals(VARIABLE.ToUpper()))

generates SQL Where clause:

WHERE TABLE.FIELD = (UPPER(VARIABLE))
---------------------
ChangeEntities.TABLE.Where(x => x.FIELD.ToUpper().Equals(VARIABLE.ToUpper()));

generates SQL Where clause:

WHERE (UPPER(TABLE.FIELD)) = (UPPER(VARIABLE))
---------------------
ChangeEntities.TABLE.Where(x => x.FIELD.Equals(VARIABLE, StringComparison.CurrentCultureIgnoreCase))

generates SQL Where clause:

WHERE TABLE.FIELD = VARIABLE
-----------------------

结果有点说话,除了最后一个例子实际上可能会遗漏记录。

有没有人对技术有任何其他想法?

谢谢,Sammer

2 个答案:

答案 0 :(得分:0)

您需要更改数据库元数据中的列排序规则或在查询中指定它。在EF中的查询中指定它的唯一方法是使用ESQL或Query Builder方法。更好的想法是更改DB列本身的排序规则。

答案 1 :(得分:0)

您使用什么数据提供商?试着阅读这篇文章(http://www.orafaq.com/node/91) - 也许它可以帮到你。