我有一个表中的用户列表,当在表上执行搜索时,我希望以搜索关键字开头的用户名显示在列表顶部,其次是拥有在其用户名中搜索关键字。按优先级排序nhibernate或sql server
例如,考虑用户名列表:
rene
irene
adler
leroy
Argog
harry
evan
我提供的“建议”,在搜索框中的用户类型,当他们试图寻找其他用户。如果用户在搜索框中键入va
,他们往往会寻找用户vain
,但由于我按用户名排序,升序排列,evan
总是排在最前面。我会想是订购像这样:
寻找VA
vain
evan
寻找重新
rene
Irene
搜索AR
Argog
harry
当然,如果他们再输入一个字符,它会进一步缩小。
想一想,这就是我想要做的 - 把用搜索键开头的用户名放在最上面(如果多个用户名以搜索键开头,按字母顺序排序)。然后,如果所需数量的用户名未完成,请按字母顺序追加包含搜索关键字的其他用户名。
我分页的SQL本身的结果 - 我用nhibernate查询执行任务。通过if the required number of usernames isn't complete
,我的意思是如果页面大小为10,并且我只有7个用户名,请在其中包含包含searchkey的其他用户名。
我目前无法看到在一个查询中执行所有操作的方法。是否必须将查询分为两部分并联系db两次以完成此操作?或者有什么方法可以排序字符串的位置?
任何有关如何有效地做到这一点的提示将是非常有用的。 - 我甚至不能想到在普通的SQL中会这样做的查询。
谢谢。
解决方案
的accepted answer把我推在正确的方向,这是最终为我工作:
.OrderBy(Projections.Conditional(
Restrictions.Where(r => r.Username.IsLike(searchKey + "%")),
Projections.Constant(0),
Projections.Constant(1))).Asc();
啊,这是一个非常有趣的解决这个问题的办法,谢谢,我会考虑这个转换现在查询过。谢谢! – LocustHorde