我在表中有一个用户列表,在对表执行搜索时,我希望以搜索键开头的用户名出现在列表顶部,然后是用户名中包含搜索键的用户。
例如,考虑用户名列表:
rene
irene
adler
leroy
Argog
harry
evan
当用户在尝试搜索其他用户时在搜索框中键入内容时,我会提供“建议”。如果用户va
在搜索框中输入内容,他们通常会寻找用户vain
,但因为我是按用户名对用户进行排序,所以升序evan
总是在最前面。我想要的是这样订购:
寻找va
vain
evan
寻找重新
rene
Irene
搜索 ar
Argog
harry
当然,如果他们再输入一个字符,它将进一步缩小。
想一想,这就是我想做的——把以搜索键开头的用户名放在最上面(如果多个用户名以搜索键开头,按字母顺序排序)。然后,如果所需的用户名数量不完整,请按字母顺序附加其中包含搜索键的其他用户名。
我在 sql 本身中对结果进行分页 - 我正在使用 nhibernate queryover 来执行任务。,if the required number of usernames isn't complete
我的意思是如果页面大小为 10 并且我只有 7 个用户名,请附加其他包含 searchkey 的用户名。
我目前看不到在一个查询中完成所有这些操作的方法。我是否必须将查询分成两部分并联系数据库两次才能完成?或者有没有办法可以根据字符串的位置进行排序?
关于如何有效地做到这一点的任何提示都会非常有帮助。- 我什至想不出用普通 sql 执行此操作的查询..
谢谢。
解决方案
接受的答案将我推向了正确的方向,这最终对我有用:
.OrderBy(Projections.Conditional(
Restrictions.Where(r => r.Username.IsLike(searchKey + "%")),
Projections.Constant(0),
Projections.Constant(1))).Asc();