【问题标题】:NHibernate Linq Like Order By LikenessNHibernate Linq Like 按相似度排序
【发布时间】:2015-12-03 19:11:40
【问题描述】:

如何编写 NHibernate 查询以按相似度排序?

从这个例子

session.Linq<Theater>()
.Where(x => x.Name.StartsWith("test") && x.Name.EndsWith("test");

来源:NHibernate.Linq LIKE

返回结果的顺序如何按“Likeness”排序?

有一个结果集

  • 约翰·多伊
  • 简·多尔
  • 珍妮丝·曼德

如果我要搜索“Doe”,我会得到(按此顺序)的结果

  • 约翰·多伊
  • 简·多尔

提前致谢。

【问题讨论】:

标签: c# linq nhibernate fluent-nhibernate


【解决方案1】:

据我所知,Where 子句首先出现,Order By 在结果集上执行,因此为了按项目的“相似性”列出项目,您需要在展开的查询格式(不是 LINQ)或在您通过自己重新排序获得结果集后本机使用 C#。

这完全取决于您对相似度的定义。默认情况下,升序或降序是字符串在字典中的列出方式。如果您想基于 LIKE '%word%' 出现的索引,那么您仍然需要在 Order By 语句中单独指定该条件。

您可以使用子字符串并将它们放入案例中并按这些案例排序。

order by case
when SUBSTRING(field,1,Len(field)) LIKE 'word%' then 1 
when SUBSTRING(field,2,Len(field)) LIKE 'word%' then 2
when SUBSTRING(field,3,Len(field)) LIKE 'word%' then 3
...
end

请看这里: Mysql: Order by like?

这里: Find all strings that share at least X characters, order by likeness

编辑: Create Criteria 可能有助于在 LINQ 中进行这项工作,但它更易于使用扩展语法 IMO。 nhibernate CreateCriteria wildcard Like when

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    相关资源
    最近更新 更多