通过HQL在Nhibernate中选择

通过HQL在Nhibernate中选择,nhibernate,hql,Nhibernate,Hql,我有一些映射: <class entity-name="Person" table="table1"> <id column="Id" type="long" name="Id"/> <set name="Address"> <key column="Person_id"/> <one-to-many class="Address"/> </set> <property column="Id" name="Id" ty

我有一些映射:

<class entity-name="Person" table="table1">
<id column="Id" type="long" name="Id"/>
<set name="Address">
<key column="Person_id"/>
<one-to-many class="Address"/>
</set>
<property column="Id" name="Id" type="long"/>
<property column="Last_Name" name="LastName" type="string"/>
<property column="First_Name" name="FirstName" type="string"/>
<property column="Education" name="Education" type="string"/>   
</class>

<class entity-name="Address" table="table2">
<id column="Id" type="long" name="Id"/>
<property column="Id" name="Id" type="long"/>
<property column="City" name="City" type="long"/>
<property column="Street" name="Street" type="string"/>
<property column="number" name="number" type="string"/>
</class>
这是我的HQL查询 hbm=从人员p加入获取p.地址,其中p.id位于:ids

但是现在我从tableAddress和Person中都得到了select* 我需要HQL,复述姓氏,人名和包含城市,街道的地址集合


我可以在地址字段中添加条件吗。 将别名添加到地址,以便可以在where子句条件中使用它

select p from person p join fetch p.Address ad WHERE p.id in (:ids) and a.City = :city
这个问题呢

select p.FirstName, p.LastName, a.City, a.Street from Person p inner join p.Addresses a WHERE p.Id in (:id) and a.City=:city
结果集合包含对象数组,然后:

var resultList = query.List();
foreach (object[] result in resultList)
{
    Console.WriteLine("Person.FirstName = {0}", result[0]);
    Console.WriteLine("Person.LastName = {0}", result[1]);
    Console.WriteLine("Address.City = {0}", result[2]);
    Console.WriteLine("Address.Street = {0}", result[3]);
}

这是返回所有字段的人。我需要对人名字段和地址字段的投影。我在“人”栏和“地址”栏中添加了其他词。有什么想法吗??也许这是不可能的,但如果一个人有50个地址。此查询返回50行。每一行包含名字、姓氏、城市和街道。需要一行名字,姓氏和收集的城市和街道的大小为50是的,这是如何内部连接工程。在海事组织,即使一个人有1000个地址,这种重复也不是问题。如果发现两个人,你会怎么办?您有两个结果集:第一个结果集中有两行FirstName和LastName,第二个结果集中有50行City和Street。如何将这两个结果集中的行配对?或者你不需要?