如何从查询而不是整个对象中获取单个列?
我可以做这样的事情来获得整个对象,但我想要的只是名字:
IList<Tribble> tribbles = session.CreateCriteria(typeof(Tribble)).List<Tribble>();
IList<string> names = new List<string>();
foreach (Tribble t in tribbles) {
names.Add(t.Name);
}
我希望能够指定其他条件,那么是否可以排除某些列被检索?
答案 0 :(得分:24)
以下是我最终使用的解决方案:
ICriteria c = session.CreateCriteria(typeof(Tribble));
c.SetProjection(Projections.ProjectionList().Add(Projections.Property("Name")));
IList<string> names = c.List<string>();
我从this old StackOverflow question得到了这个想法。
答案 1 :(得分:7)
差不多五年后......,这就是你可以用NHibernate.Linq做的事情:
IList<string> names = session.Query<Tribble>().Select(t => t.Name).ToList()
答案 2 :(得分:2)
如何按字符串执行查询?
IList<string> names = session.CreateQuery("select name from Tribbles").List<string>();
答案 3 :(得分:2)
您可以这样做:
IQuery query = dao.GetQuery(@"SELECT u.Id
FROM UserImpl u
WHERE u.UserName = :username");
query.SetParameter("username", username);
return (long)query.UniqueResult();
答案 4 :(得分:-2)
你通常不这样做。拥有部分填充的业务对象很少有意义。
你为什么要这样做?