2015-11-18 3 views
1

У меня есть список проекционный в моей C# код:Dynamic DTO из NHibernate критериев проекции

var criteria = DetachedCriteria.For(this.modelType); 

     for (int i = 0; i < this.fields.Length; i++) 
      projections.Add(Projections.Property(this.fields[i])); 

     if (fields.Length > 0) 
      criteria.SetProjection(projections); 

, если Я не установить любое поле в моей проекции мое возвращение следовать:

enter image description here

, но если я установил проекции в своем коде, мой результат следующий:

enter image description here

Как преобразовать список с проекциями в объект Dynamic DTO?

ответ

1

Что нам нужно трансформатор:

criteria 
    .SetResultTransformer(
     NHibernate.Transform.Transformers.AliasToBean<MyEntity>()) 

или без родовой

criteria 
    .SetResultTransformer(
     NHibernate.Transform.Transformers.AliasToBean(this.modelType)) 

Точка с трансформаторами использовать сглаживание (см .As()):

.SetProjection(Projections.ProjectionList() 
    .Add(Projections.Property("Property1").As("Property1")) 
    .Add(Projections.Property("Property2").As("Property2")) 
    .Add(Projections.Property("Property3").As("Property3")) 
) 

Проверить еще здесь, например:

+0

мне нужен динамический объект DTO .. ​​пользователь выбирает, какие поля предназначены я вернуть один динамический список его –

+0

Я бы сказал, что термин динамический DTO не имеет смысла. У нас либо есть DTO, определенный в C#, как стандартный класс, либо словарь. Если это словарь, результат 'IList ' должен быть легко преобразован в IDictionary. Но все же вам нужно знать ключи ... (например, выше) ... [здесь] (http://stackoverflow.com/a/13632872/1679310) несколько слов о dto и poco –

+0

Второй пример поможет мне. tks –

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