NHibernate - QueryOver Дочерние строки как значения, разделенные запятыми

Я должен написать запрос, где для каждого поставщика я должен прочитать контактные номера поставщиков из 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

Спасибо

1 ответ

Решение

В общем, если это действительно так просто:

... Это может быть легко сделано в простой 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>();
Другие вопросы по тегам