从实体获取单列

如何从查询而不是整个对象中获取单个列?

我可以做这样的事情来获得整个对象,但我想要的只是名字:

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

我希望能够指定其他条件,那么是否可以排除某些列被检索?

这是我最终使用的解决方案:

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

我从这个旧的StackOverflow问题中得到了这个想法。

大约五年后……,这是你可以用NHibernate.Linq做的事情:

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

你可以这样做:

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

用字符串执行查询怎么样?

 IList names = session.CreateQuery("select name from Tribbles").List(); 

你通常不这样做。 拥有部分填充的业务对象很少有意义。

你为什么想做这个?