C# 从实体获取单个列
如何从查询中获取单个列而不是整个对象 我可以这样做来获取整个对象,但我想要的只是名称:C# 从实体获取单个列,c#,nhibernate,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);
IList<Tribble> tribbles = session.CreateCriteria(typeof(Tribble)).List<Tribble>();
IList<string> names = new List<string>();
foreach (Tribble t in tribbles) {
names.Add(t.Name);
}
IList tribbles=session.CreateCriteria(typeof(Tribble)).List();
IList names=新列表();
foreach(Tribble中的Tribble t){
名称。添加(t.Name);
}
我希望能够指定其他条件,因此是否可以将某些列排除在检索之外?您通常不会这样做。使用部分填充的业务对象几乎没有意义
为什么要这样做?按字符串执行查询怎么样
IList<string> names = session.CreateQuery("select name from Tribbles").List<string>();
IList names=session.CreateQuery(“从Tribbles中选择名称”).List();
您可以执行以下操作:
IQuery query = dao.GetQuery(@"SELECT u.Id
FROM UserImpl u
WHERE u.UserName = :username");
query.SetParameter("username", username);
return (long)query.UniqueResult();
以下是我最终使用的解决方案:
ICriteria c = session.CreateCriteria(typeof(Tribble));
c.SetProjection(Projections.ProjectionList().Add(Projections.Property("Name")));
IList<string> names = c.List<string>();
ICriteria c=session.CreateCriteria(typeof(Tribble));
c、 SetProjection(Projections.ProjectionList().Add(Projections.Property(“Name”));
IList names=c.List();
我是从。差不多五年后……得到这个想法的,这就是使用NHibernate可以做的。Linq:
IList<string> names = session.Query<Tribble>().Select(t => t.Name).ToList()
IList names=session.Query().Select(t=>t.Name).ToList()
我在整个程序的几十个类中都在使用它,这是我唯一需要这样做的时间,在这种情况下是必要的。你能进一步解释一下用例是什么吗?这不是一直都在发生吗?例如,我希望显示员工的详细信息及其办公室的名称。我不需要整个办公室,只需要名字。@cbp:这确实经常发生。假设Employee被映射为m:1到Office,那么当使用联接加载该员工时,NHibernate将检索Office。使用业务对象时,始终返回完全填充的对象(当然也有例外)。这就是面向对象编程的方式。从技术上讲,您实际上必须这样做:IList names=session.CreateQuery(“从Tribbles t中选择t.name”).List();