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

标签 c# sql 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

谢谢

最佳答案

一般来说,如果那样真的很容易:

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

关于c# - NHibernate - QueryOver 子行作为逗号分隔值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32730333/

相关文章:

c# - 如何在运行时组件中返回指针类型?

php - 需要好的 php sql 库

SQL Server 简单插入语句超时

c# - NHibernate并发问题

asp.net - Nhibernate异常:"Unknown column ' **.**_id'在 'field list'“

c# - 数字文本框 - 使用 Double.TryParse

c# - Entity Framework 6 - 导航属性的主键

mysql - 为什么 `MUL` 关键字出现在 `Key` mysql 命令的 `show columns from Employee` 列下?

c# - UserControl 的事件处理程序未触发

mysql - 年薪月薪