2015-12-03 3 views
0

Как можно запросить NHibernate по своему усмотрению?NHibernate Linq Мне нравится Order By Likeness

Из этого примера

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

Источник: NHibernate.Linq LIKE

Как мог порядок результатов возвращаемого быть заказан 'Сходство'?

т.е.

С набором результатов

  • John Doe
  • Джейн Doel
  • Дженис Мандер

Если бы я был искать 'Doe' Я хотел бы получить результаты (в указанном порядке)

  • John Doe
  • Джейн DOEL

Спасибо заранее.

+0

Попробуйте soundex func http://dev.mysql.com/doc/refman/5.7/ru/string-functions.html#function_soundex –

ответ

0

Насколько я знаю, предложение 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

EDIT: Создать критерии могут быть полезны для создания этой работы в LINQ, но его проще использовать расширенный синтаксис ИМО. nhibernate CreateCriteria wildcard Like when