admin

NHibernate-QueryOver子行作为逗号分隔的值

sql

我必须写一个查询,其中每个供应商我都必须从中读取供应商的联系电话,VendorContact但要成行,每个唯一供应商要一行,每个电话号码要一列,以逗号分隔字符串作为主要结果。这可以在普通
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>();

一个供应商可能会有更多电话号码,所以我需要

Vendor         Contacts
------         -----------------------------------------
V0001          905-2343444,416-4545454,647-8484834
V0002          905-2356219,416-4111111,647-8000004

谢谢


阅读 187

收藏
2021-06-07

共1个答案

admin

总的来说,如果那真的很简单的话:

…这可以在普通 sql中 轻松完成,但是…

只需在原始查询中使用该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>();
2021-06-07