2009-07-02 95 views
14

如何從查詢中取回單個列而不是整個對象?從實體獲取單列

我可以做這樣的事情對整個事件的對象,但我要的是名稱:

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

我想可以指定附加標準,那麼,這可能只是排除某些列被檢索?

回答

23

這裏是解決方案,我終於結束了使用:

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

我有這個想法從this old StackOverflow question

-2

你通常不會。擁有部分填充的業務對象是很有意義的。

你爲什麼要這麼做?

+0

我使用它貫穿了幾十個類別的整個程序,這是我唯一的一次需要做到這一點,這是必要的。 – 2009-07-02 17:24:22

+0

你能否進一步解釋用例是什麼? – 2009-07-02 18:50:20

2

如何通過字符串執行查詢?

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

你可以做這樣的事情:

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

將近五十年後...,這是你可以做什麼用NHibernate.Linq:

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