2015-03-09 2 views
2

Я пытаюсь использовать QueryOver.OrderBy со строками для имен свойств для дочерних объектов. например следующие работы, но я жестко кодирую поле OrderBy.QueryOver OrderBy дочернее свойство, используя строки

Customer custAlias = null; 
session.QueryOver<Campaign>() 
     .JoinAlias(x => x.Customer,() => custAlias) 
     .OrderBy(() => custAlias.Name).Desc() // want to use string property name 
     .List(); 

можно указать OrderBy, используя строку с чем-то вроде:

 .OrderBy(Projections.Property("DOB")).Desc(); 

Но это ищет «DOB» на субъекте кампании, а не лицо ребенка клиента. Возможно ли получить псевдоним, используемый NH, и затем установить путь к свойству, например.

 .OrderBy(Projections.Property("cust.DOB")).Desc(); // where "cust" is the alias 

Любые идеи?

ответ

2

Используемый псевдоним - это имя переменной. Так

Projections.Property("custAlias.DOB") 

(не могу проверить, но если я помню corretly он работает)

Интересно, что это не переменная, само по себе, что используется в качестве псевдонима, но его имя. Что это значит?

QueryOver<Campaign> query; 

{ 
    Customer custAlias = null; 
    query = session.QueryOver<Campaign>() 
     .JoinAlias(x => x.Customer,() => custAlias) 
} 

{ 
    Customer custAlias = null; 
    var result = query.OrderBy(() => custAlias.Name).Desc() // want to use string property name 
     .List() 

} 

Два разных custAlias, но он все еще работает :-)

(полезно, если вы хотите разделить части запроса в нескольких методов ... Важно только то, что они используют один и тот же именование для псевдонимов)

+0

Спасибо, xanatos, который сработал. Я бы никогда не догадался, что имя переменной C# можно использовать в строковом пути! Очевидно, что-то я не понимаю о переменных и псевдонимах ... – Chet

+0

@Chet Нет, так работает NHibernate, а не что-то общее из C# или .NET. Это нечто уникальное. Это происходит потому, что QueryOver и Criteria API (старый API на основе текста) являются двумя ветвями из трех, поэтому они должны иметь возможность общаться. И их «общий» язык - это «текст», а не «отраженные свойства»/«деревья выражений», – xanatos

Смежные вопросы