NHibernate中不区分大小写的排序顺序

Gei*_*sve 6 c# nhibernate

请考虑以下条件查询:

var x = SomeCriteria.AddOrder(new Order("Name",true)).List();

这将按名称属性对结果集进行排序,但区分大小写:

"A1"
"B1"
"a2"
Run Code Online (Sandbox Code Playgroud)

任何想法如何添加订单不区分大小写结果"a2"将在"B1"之前结束?

Tra*_*man 10

您应该能够通过订购一个能够为您规范化案例的投影来实现这一目标.例如,Oracle有一个"低级"函数,它将降低大小写字符串数据类型,如varchar2和nvarchar2; 所以我将使用这个sql函数来形成一个适当排序的投影.

var projection = Projections.SqlFunction("lower", 
                                         NHibernateUtil.String, 
                                         Projections.Property("Name"));

var x = SomeCriteria.AddOrder(Orders.Asc(projection)).List()

如果您使用的是SQL Server,我建议使用"upper"函数而不是"lower"来提高效率.Microsoft已优化其本机代码以执行大写比较,其中世界其他地方似乎已针对小写进行了优化.