Pergunta

É possível escolher quais colunas eu quero em troca da sessão.createcriteria ()?

Egz.:

var x = session.CreateCriteria();
    x.CreateAlias("EmployeePosition", "employeePosition");
    x.Add(Restrictions.Eq("employeePosition.Name", "Developer"));

E existe uma maneira de adicionar algo como "Select LastName" para evitar baixar a linha inteira.

Foi útil?

Solução

Faça uma classe que tenha apenas as propriedades necessárias, geralmente é uma classe de resumo como {id, etiqueta} e você a reutiliza em qualquer lugar que precisar de um tipo simples, em uma listagem, por exemplo. Use o projectionList para definir quais colunas retornar. Em seguida, use Transformers.aliastobean para transformar o resultado em seu tipo simples.

ProjectionList projectionList = Projections.ProjectionList();
projectionList.Add(Projections.Property("EmployeeID"), "Id");
projectionList.Add(Projections.Property("EmployeePosition"), "Label");
var x = DetachedCriteria.For(Employee);
x.SetProjection(projectionList);
x.SetResultTransformer(Transformers.AliasToBean(SimpleType)));
return x.GetExecutableCriteria(UnitOfWork.CurrentSession).List<SimpleType>();

Outras dicas

Você pode fazer isso usando projeções:

IList<Object[]> list = session.CreateCriteria(typeof(Employee))
  .SetProjection(Projections.ProjectionList()
    .Add(Projections.Property("FirstName"))
    .Add(Projections.Property("LastName"))
  ).List<Object[]>();

  foreach( Object[] person in list )
  {
    String firstName = person[0];
    String lastName = person[1];
  }

Confira o espaço para nome do Nibernate.Expressões para outras projeções.

Eu sugeriria dar uma tentativa do LINQ para Nibernatar. Isso permitirá que você faça o que está perguntando de uma maneira muito natural.

Para adicionar Dana's Responda, se você tiver uma classe real em que deseja lê -la, também pode usar Transformers.aliasTobean com a projeção. O Nibernate tentará preencher as propriedades do objeto com valores de nomes de campos correspondentes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top