我们正在转向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
答案 0 :(得分:0)
您需要更改数据库元数据中的列排序规则或在查询中指定它。在EF中的查询中指定它的唯一方法是使用ESQL或Query Builder方法。更好的想法是更改DB列本身的排序规则。
答案 1 :(得分:0)
您使用什么数据提供商?试着阅读这篇文章(http://www.orafaq.com/node/91) - 也许它可以帮到你。