Domanda

suppongono in un'entità ci sono attributi id, nome utente, età, indirizzo. Ora voglio solo id e il nome utente e io uso questo codice per esso.

Le proiezioni consentono il ritorno di qualcosa di diverso da un elenco degli enti da una query.

var proj = Projections.ProjectionList()
    .Add(Projections.Property("Id"), "Id")
    .Add(Projections.Property("Username"), "Username");

var list2 = DetachedCriteria.For<User>()
    .Add(Expression.Eq("Username", "lachlan"))
    .GetExecutableCriteria( sessionFactory.GetCurrentSession())
    .SetProjection( proj )
    .List();

Come faccio a recuperare i valori. In cui verrà questi valori presa dell'oggetto.

È stato utile?

Soluzione

Se non viene utilizzato un trasformatore risultato, una proiezione causa un elenco di oggetti anonimi con valori previsti. Questo sarebbe sufficiente per l'associazione dati.

Per altri usi, si desidera impostare un trasformatore risultato che creerà oggetti di tipo noto. Il AliasToBeanTransformer creerà un oggetto del tipo specificato per ogni riga, e impostare le proprietà ai valori di riga.

Se si conosce il tipo di risultati, è possibile utilizzare il metodo List<T>() generico.

var proj = Projections.ProjectionList()
    .Add(Projections.Property("Id"), "Id")
    .Add(Projections.Property("Username"), "Username");

var list2 = DetachedCriteria.For<User>()
    .Add(Expression.Eq("Username", "lachlan"))
    .GetExecutableCriteria( sessionFactory.GetCurrentSession())
    .SetProjection( proj )
    .SetResultTransformer(Transformers.AliasToBean(typeof(Result)))
    .List<Result>();

trasformatori dei risultati possono essere utilizzati anche su query SQL e HQL.

list2 = Session.CreateSQLQuery("select Id, Username from user_table")
    .SetResultTransformer(Transformers.AliasToBean(typeof(Result)))
    .List<Result>();

list2 = Session.CreateQuery("select Id, Username from User")
    .SetResultTransformer(Transformers.AliasToBean(typeof(Result)))
    .List<Result>();

In questi esempi la classe del risultato non ha bisogno di essere una classe mappata e deve avere le proprietà selezionate.

partial class Result
{
    public int Id { get; set; }
    public string Username { get; set; }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top