2009-07-02 24 views
14

Wie können Sie eine einzelne Spalte von einer Abfrage anstatt eines ganzen Objekts zurückholen?Abrufen einer einzelnen Spalte aus einer Entität

ich so etwas tun könnte das ganze Objekt zu bekommen, aber alles was ich will der Name:

IList<Tribble> tribbles = session.CreateCriteria(typeof(Tribble)).List<Tribble>(); 
IList<string> names = new List<string>(); 
foreach (Tribble t in tribbles) { 
    names.Add(t.Name); 
} 

Ich möchte in der Lage sein, zusätzliche Kriterien, so ist es möglich, nur bestimmte ausschließen Spalten aus abgerufen werden?

Antwort

23

Hier ist die Lösung, die ich schließlich am Ende mit:

ICriteria c = session.CreateCriteria(typeof(Tribble)); 
c.SetProjection(Projections.ProjectionList().Add(Projections.Property("Name"))); 
IList<string> names = c.List<string>(); 

ich von this old StackOverflow question diese Idee.

-2

Normalerweise nicht. Es macht selten Sinn, ein teilweise gefülltes Geschäftsobjekt zu haben.

Warum möchten Sie das tun?

+0

ich es während des gesamten Programms mit Dutzenden von Klassen verwenden, ist dies das einzige Mal, dass ich benötigt, um dies zu tun, und es ist in diesem Fall notwendig. –

+0

Können Sie weiter erklären, was der Anwendungsfall ist? –

+0

Passiert das nicht die ganze Zeit? Zum Beispiel möchte ich die Details eines Mitarbeiters sowie den Namen seines Büros anzeigen. Ich brauche nicht das ganze Büro, nur den Namen. – cbp

2

Was ist mit dem Ausführen einer Abfrage nach String?

IList<string> names = session.CreateQuery("select name from Tribbles").List<string>(); 
+1

Technisch müssten Sie dies tatsächlich tun: IList names = session.CreateQuery ("wählen t.name von Tribbles t"). Liste (); –

2

Sie können etwas tun:

IQuery query = dao.GetQuery(@"SELECT u.Id 
           FROM UserImpl u 
           WHERE u.UserName = :username"); 
       query.SetParameter("username", username); 
return (long)query.UniqueResult(); 
7

Fast fünf Jahre später ..., das ist, was man konnte mit NHibernate.Linq tun:

IList<string> names = session.Query<Tribble>().Select(t => t.Name).ToList() 
Verwandte Themen