Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从实体获取单个列_C#_Nhibernate - Fatal编程技术网

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();