select中有多列

时间:2012-03-25 20:56:43

标签: nhibernate

我是Hibernate的新手,我正在努力解决问题:

我有3个表,我需要在DataGridView上显示这些表中的一些数据。 通常 - 没有休眠,我必须选择并绑定列。

但我不需要这些表中的所有列。 我制作了示例项目,从一个表中选择数据。我将数据存储为hibernate poco对象的集合。然后我将它作为数据源绑定到DataGridView,它很好。

如果我需要来自多个表的列,如何绑定? 我应该有一个列的列。还是3个poco课程?或者我完全错了,我需要在映射级别上进行此操作?

1 个答案:

答案 0 :(得分:1)

如果您只需要显示数据(而不是更改它),您可以为要在DataGridView中列出的对象定义一个类,例如。

CombinedClassForGrid
{
    public Id { get; set; }
    public PropertyA1 { get; set; }
    public PropertyB1 { get; set; }
    public PropertyB2 { get; set; }
}

使用NHibernate,您可以像这样查询表,假设ClassA具有属性ClassBRef

ClassB bAlias = null;
CombinedClassForGrid cForGrid = null;

IList<CombinedClassForGrid> result = session.QueryOver<ClassA>()
    .JoinAlias(a => a.ClassBRef, () => bAlias)
    .SelectList(list => list
        .Select(a => a.Id).WithAlias(() => cForGrid.Id)
        .Select(a => a.Property1).WithAlias(() => cForGrid.PropertyA1)
        .Select(a => bAlias.Property1).WithAlias(() => cForGrid.PropertyB1)
        .Select(a => bAlias.Property2).WithAlias(() => cForGrid.PropertyB2))
        .TransformUsing(Transformers.AliasToBean<CombinedClassForGrid>())
        .List<CombinedClassForGrid>();

然后您应该能够将result绑定到DataGridView。