C# 连接查询的条件表示
有两个班 1 A类[物业:-aid、aname] 2 B类[物业:-投标、A、B名称] 下拉列表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
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>();