NHibernate - QueryOver 子行作为逗号分隔值
NHibernate - QueryOver Child rows as comma separated values
我必须编写一个查询,对于每个供应商,我必须从 VendorContact
中读取供应商的联系电话,但不是按行,每个唯一供应商一行,每个 phone 号码一列作为主要结果中的逗号分隔字符串。这可以在 SQL 中轻松完成,但我必须在 QueryOver
中完成。我无法在 QueryOver
SQL 中声明变量。
var vendorvar = Session.QueryOver<Vendor>(() => V)
.Left.JoinQueryOver(() => v.ContactNumbers, () => VendorContact)
.SelectList(list => lst
.Select(() => v.Name)
.Select(() => VendorContact.PhoneNumber))
.TransformUsing(Transformers.AliasToBean<VendorModel>())
.List<VendorModel>();
一个供应商可能有更多 phone 个号码,所以我需要
Vendor Contacts
------ -----------------------------------------
V0001 905-2343444,416-4545454,647-8484834
V0002 905-2356219,416-4111111,647-8000004
谢谢
总的来说,如果真的那么简单的话:
...This can be done easily in plain sql but...
只需在原始查询中使用 SQL 语句。结果有一些 DTO
public class MyDto
{
public virtual string FirstAlias { get; set; } // set name and type you need
public virtual string SecondAlias { get; set; }
}
这里我们进行查询、转换和列表:
// raw SQL query
var query = session
.CreateSQLQuery("Select " +
" SomColumn AS FirstAlias, " +
" SomComputedColumn AS SecondAlias " +
" FROM mySchema.MyTable" +
" join, where, order by..... "
);
// here we set transformer (check the aliases)
query.SetResultTransformer(Transformers.AliasToBean<MyDto>());
// and there is nice C# result
var list = query.List<MyDto>();
我必须编写一个查询,对于每个供应商,我必须从 VendorContact
中读取供应商的联系电话,但不是按行,每个唯一供应商一行,每个 phone 号码一列作为主要结果中的逗号分隔字符串。这可以在 SQL 中轻松完成,但我必须在 QueryOver
中完成。我无法在 QueryOver
SQL 中声明变量。
var vendorvar = Session.QueryOver<Vendor>(() => V)
.Left.JoinQueryOver(() => v.ContactNumbers, () => VendorContact)
.SelectList(list => lst
.Select(() => v.Name)
.Select(() => VendorContact.PhoneNumber))
.TransformUsing(Transformers.AliasToBean<VendorModel>())
.List<VendorModel>();
一个供应商可能有更多 phone 个号码,所以我需要
Vendor Contacts
------ -----------------------------------------
V0001 905-2343444,416-4545454,647-8484834
V0002 905-2356219,416-4111111,647-8000004
谢谢
总的来说,如果真的那么简单的话:
...This can be done easily in plain sql but...
只需在原始查询中使用 SQL 语句。结果有一些 DTO
public class MyDto
{
public virtual string FirstAlias { get; set; } // set name and type you need
public virtual string SecondAlias { get; set; }
}
这里我们进行查询、转换和列表:
// raw SQL query
var query = session
.CreateSQLQuery("Select " +
" SomColumn AS FirstAlias, " +
" SomComputedColumn AS SecondAlias " +
" FROM mySchema.MyTable" +
" join, where, order by..... "
);
// here we set transformer (check the aliases)
query.SetResultTransformer(Transformers.AliasToBean<MyDto>());
// and there is nice C# result
var list = query.List<MyDto>();