从实体获取单列

时间:2009-07-02 17:18:06

标签: c# nhibernate

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

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

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

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

5 个答案:

答案 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)

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

你为什么要这样做?