2012-02-07 54 views
0

我一直在学习如何使用nHibernate与Vb.net使用在线(使用C#)的所有示例进行学习。这对于基础知识来说已经很好了,但是现在我正试图学习如何使用QueryOver的JoinAlias,并且从C#转到VB.net是很困难的。我一直在使用this page's answer作为参考,但我仍然无法将这样的示例转换为Vb.net。有人能帮助我吗?如何在VB.NET中使用QueryOver与nHibernate

+0

您正在使用哪个版本的VB.NET?在.NET 4之前,VB没有像C#那样的lambda支持。如果您使用的是旧版本,那可能会解释您的一些问题。 – 2012-02-07 16:12:00

+0

我现在正在使用.NET 3.5。 – 2012-02-08 13:13:46

回答

0

更新时间:

简单的方法是引入TableResultDetailsClass的TableResultClass收集和使用。

results = session.QueryOver(Of TableResultClass)() _ 
    .Where(Function(tr) tr.Id = wantedId) _ 
    .Select(Function(tr) New With { tr.Id, tr.Details.Sum(Function(trd) trd.Property) }) _ 
    .List() 

否则你得到的对象[]回

results = session.QueryOver(Of TableResultDetailsClass)() _ 
    .Where(Function(td) tD.Parent.Id = wantedId) _ 
    .Select(Projections.Property(Function(td) tD.Parent.Id), Projections.Sum(Function(td) tD.Prpoerty)) _ 
    .List() 

原文:

所有你需要的是仿制药和lambda表达式在vb.net

Dim child as Child 
results = session.QueryOver(Of User)() 
    .Where(Function(u) u.Name = "blub") 
    .JoinAlias(Function(u) u.Childs, Function child) 
    .List() 

更新:看来你正在寻找映射。随着FluentNHibernate它看起来像

Public Class TableEntityMap Inherits ClassMap(Of TableEntity) 

    Sub New() 
     Id(Function(x) x.Id, "DID") 

     HasMany(Of TableEntity)(Function(x) x.Details).Inverse() 
    End Sub 
End Class 

Public Class TableEntityMap Inherits ClassMap(Of TableEntity) 

    Sub New() 
     Id(Function(x) x.Id) 

     References(Of DetailsTableEntity)(Function(x) x.Parent, "Parent") 

    End Sub 
End Class 

Dim entity as TableEntity = sess.Get(Of TableEntity)(someid) 

'' get all details of this entity 
Dim details = entity.Details 
+0

这是一个相当普遍,模糊的答案,你在那里......也许我没有指定足够的? 我想汇总2个不同的表格。 – 2012-02-07 16:10:16

+0

抱歉是一个快速拍摄。也许最好是显示一个查询,然后转换或描述你想要从一个已定义的模式返回的内容 – Firo 2012-02-07 16:13:48

+0

好的。在这种情况下,我有Table和DetailsTable类。该表有一个DID,但DetailsTable有一个是Parent的列,所以Table。所以我试图在DetailsTable = Table时加入。我会怎么做?我希望这有助于澄清我的问题。 – 2012-02-07 16:20:06