C# 连接查询的条件表示

C# 连接查询的条件表示,c#,nhibernate,criteria,C#,Nhibernate,Criteria,有两个班 1 A类[物业:-aid、aname] 2 B类[物业:-投标、A、B名称] 下拉列表 ICriteria criteria = ActiveRecordMediator<B>.GetSessionFactoryHolder() .CreateSession(typeof(B)).CreateCriteria(typeof(B)) .setFetchMode(“A”,FetchMode.JO

有两个班

1 A类[物业:-aid、aname]

2 B类[物业:-投标、A、B名称]

下拉列表

ICriteria criteria = ActiveRecordMediator<B>.GetSessionFactoryHolder()
                     .CreateSession(typeof(B)).CreateCriteria(typeof(B))
                     .setFetchMode(“A”,FetchMode.JOIN);
ICriteria标准=ActiveRecordMediator.GetSessionFactoryHolder()
.CreateSession(类型化(B)).CreateCriteria(类型化(B))
.setFetchMode(“A”,FetchMode.JOIN);
ddlistToLet.DataSource=criteria.List()

ddlistToLet.DataTextField=“bname”

ddlistToLet.DataValueField=“aid”

ddlistToLet.DataBind()

我得到这个错误

数据绑定:“B”不包含名为“aid”的属性


如何解决此问题?

使用条件时,NHibernate将返回一个二维结果数组。我认为下拉列表无法了解底层对象结构是什么。查看结果,您应该能够调整绑定。

提供一个具有该值的属性

class B
{
  public A A { get; set;}
  public aid { get { return A.aid; } }
}

如果您不喜欢它,因为您不想更改您的类,那么您可以使用一个特殊的类绑定到控件。

将查询结果转换为更“绑定友好”的对象:

公共类MyDTO{
公共字符串BeeName{get;set;}
公共字符串辅助{get;set;}
}
// .. (剪断)。。
ICriteria条件=ActiveRecordMediator.GetSessionFactoryHolder()
.CreateSession(类型化(B)).CreateCriteria(类型化(B))
.CreateCriteria(“A”)
.SetProjection(Projections.ProjectionList()项目)
.Add(Projections.Property(“bname”、“BeeName”))
.Add(Projections.Property(“aid”、“aid”))
)
.SetResultTransformer(Transformers.AliasToBean(typeof(MyDTO)));
IList results=criteria.List();
public class MyDTO {
  public string BeeName { get; set; }
  public string AId { get; set; }
}

// .. (snip) ..

ICriteria criteria = ActiveRecordMediator<B>.GetSessionFactoryHolder()
  .CreateSession(typeof(B)).CreateCriteria(typeof(B))
  .CreateCriteria(“A”)
  .SetProjection(Projections.ProjectionList()
    .Add(Projections.Property("bname", "BeeName"))
    .Add(Projections.Property("aid", "AId"))
  )
  .SetResultTransformer(Transformers.AliasToBean(typeof(MyDTO)));

IList<MyDTO> results = criteria.List<MyDTO>();